tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: 画面遷移
投稿日: 2015/08/19(Wed) 10:42
投稿者魔界の仮面弁士
> 同じ画面を開いても、現象が100%出るのではなく、出るときは、連続して発生します
これは、GUIのテスト自動化ライブラリ(Codeer.Friendly とか)を利用した上での検証結果でしょうか。
それとも、利用者による体験あるいは手動テストによるものでしょうか。

(再現したときの手順が、前回と同様の操作であったことを保証できれば良いのですが)


> ・A画面⇒B画面⇒C画面
> ここまでは、表示で逆転現象は、100%発生していません。
ここは問題無さそうなのですね。
[A.EXE]から[B.EXE]への起動は、Process.Start メソッドでしょうか。


>  画面を開いていき、C画面からD画面を開いたとき、
フォームの表示方法は、どのようにしていますか?

A: Form2.Show()    '暗黙のインスタンスを利用

B: Form2.Show(Me)  '暗黙のインスタンスを利用し、親フォームを明示

C: F = New Form2()
   F.Show()        '明示的インスタンスを利用

C: F = New Form2()
   F.Show(Me)      '明示的インスタンスを利用し、親フォームを明示

D: Using F As New Form2()
      F.ShowDialog()
   End Using       '明示的インスタンスを利用したモーダル表示

E: Using F As New Form2()
      F.ShowDialog(Me)
   End Using       '明示的インスタンスを利用し、親フォームを明示してモーダル表示

F: 上記以外




> D画面を動的に作成し、
D画面をデザイン時に用意しておくのではなく、コード上で動的に作成するということでしょうか?


Dim f As New Form()
f.Text = "動的生成"
Dim flow As New FlowLayoutPanel() With {.Dock = DockStyle.Fill, .AutoScroll = True}
flow.Controls.AddRange(Enumerable.Range(100, 200).Select(
    Function(i) New TextBox() With {.Text = CStr(i)}).ToArray())
f.Controls.Add(flow)
AddHandler f.FormClosing, Sub(o, p) MsgBox("合計値:" &
    flow.Controls.OfType(Of TextBox)().Sum(Function(t) Val(t.Text)))
f.Show(Me)



>  表示中(Shownあたり)で、
Shown は表示中ではなく、表示直後ですね。


> D画面の上にC画面が上に表示されてしまう
D は C の子画面なのでしょうか?

オーナー指定があるのに、親子関係が変わってしまうのだとしたら問題ですが、
オーナー指定が無いのなら、どちらが手前にもなりえるはずです。
(表示されるタイミングが適切かどうかは別ですが)


> 出やすいところは、画面項目数が多いとき、発生しやすいです
・処理に長い時間(たとえば1秒以上)を要するイベントがありませんか?
・DoEvents を呼び出している箇所はありませんか?
・BringToFront/SendToBack/Activate などを意図的に呼び出しているイベントはありませんか?
・暗黙のフォームインスタンスを利用していませんか?



> 画面の切替が勝手に行われてしまう(画面は作成途中)
ユーザーが何も操作していないのに、一定時間あるいは不定期に
前面表示の切り替わりが起こってしまう、ということでしょうか?

それとも、特定の操作をしたときに、意図しない画面の切替が
発生しはじめるということでしょうか。


Activated や Deactivate で他のフォームを制御していたり、
意図的に TopMost の On/Off 切替を行っているようなコードが
どこかに紛れているような気もしますが…そういうわけでは無いのでしょうし。


「現象を再現可能なテストアプリ」を作ることが難しいなら、
既存のコードを削っていき、どの処理を通過したときに
現象が発生しているのかの特定が必要になりそうですが、
こればっかりは、ソースコードを持っている当人でなければ
判断できないですしね…。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。