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

タイトル Re^6: 画面遷移
投稿日: 2015/08/20(Thu) 23:20
投稿者貴将
ありがとうございます。
遅くなりすみません。

> > 同じ画面を開いても、現象が100%出るのではなく、出るときは、連続して発生します
> これは、GUIのテスト自動化ライブラリ(Codeer.Friendly とか)を利用した上での検証結果でしょうか。
> それとも、利用者による体験あるいは手動テストによるものでしょうか。
>
> (再現したときの手順が、前回と同様の操作であったことを保証できれば良いのですが)
>

  ⇒ 回答
  
    手動テストによるものです。
    
    ⇒C画面からD画面を表示するときは、C画面上のラベルをクリック(動的ラベル)
    ⇒D画面からE画面を表示するときは、D画面上のボタンをクリック(動的ボタン)


>
> > ・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: 上記以外
>
  ⇒ 回答
    現在は、現象が少ないAのパターンを採用しています。

    過去に Cのパターン、Bのパターン、及びForm2.ShowDialog等を行いました。
    (ShowDialogはBやCのパターン行い、Usingは使用していません)
    ⇒  頻繁に現象が発生しました。
  
  
>
>
>
> > D画面を動的に作成し、
> D画面をデザイン時に用意しておくのではなく、コード上で動的に作成するということでしょうか?
>

  ⇒回答
    すみません。説明不足で補足します。
    
    
    C画面 
      デザイン時
       @フォーム上に、ピクチャーボックスを作成
        ⇒ピクチャーボックスには、JPGのイメージを設定
        ⇒InitialImage ⇒ ローカルリリースを選択してインポートしています(JPG)
       Aフォーム上に、ボタンを作成(印刷・終了)
      動的
       @ピクチャーボックスのイメージ上(下絵)に、ラベルを動的に作成します。
        ⇒・動的にラベルを作成します
         ・ラベルのバックカラーを条件によって変えます
         ・ラベルの大きさを条件によって変えます
         ・ラベルにクリックイベントを追加します

    D画面 
      デザイン時
       @フォームをsplitcontainerで上下に分割
       A上の段にピクチャーボックスを作成、
       B下の段にボタンを作成(印刷・終了)
      動的
       @ピクチャーボックスに動的にボタンを追加します。
        2から20個までパターンがあります
       Aラベルを作成します
         ・100から1500個くらいのラベルを作成します
         ・ラベルのバックカラーを条件によって変えます

    E画面 
      デザイン時
       @フォームをsplitcontainerで上下に分割
       A上の段にピクチャーボックスを作成、
       B下の段にボタンを作成(印刷・終了)
      動的
       @ラベルを作成します
         ・500から6000個くらいのラベルを作成します
         ・ラベルのバックカラーを条件によって変えます







    C画面からD画面を表示するときは、動的に作成したラベルをクリックします。
    D画面からE画面を表示するときは、動的に作成したボタンをクリックします。
    

    動的の作成数
                         D画面    E画面
    A画面⇒B画面⇒C画面⇒D1画面⇒E11画面  300個        400個
                   ⇒E12画面  300個        400個
                D2画面⇒E21画面  300個        400個
                D3画面⇒E31画面  800個       1200個
                   ⇒E32画面  300個       1500個
                D4画面⇒E41画面   800個       2400個
                D5画面⇒E52画面  1000個       4000個
                D6画面⇒E63画面  1500個       6000個





>
> 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)
>
>
   
    
>
>
> > D画面の上にC画面が表示されてしまう
> D は C の子画面なのでしょうか?

  ⇒回答
   Form2.Showで開いている画面です。
   


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

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


>
>
>
> > 画面の切替が勝手に行われてしまう(画面は作成途中)
> ユーザーが何も操作していないのに、一定時間あるいは不定期に
> 前面表示の切り替わりが起こってしまう、ということでしょうか?
>
> それとも、特定の操作をしたときに、意図しない画面の切替が
> 発生しはじめるということでしょうか。
>
  ⇒回答
    クリックしてから画面が表示される間です
    
    C画面からD画面を表示するときは、動的に作成したラベルをクリックしたあと
    
    
    D画面からE画面を表示するときは、動的に作成したボタンをクリックしたあと
    
    


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

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

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