- 題名: Form_Load中に別FormをLoadしていますが・・・
- 日時: 2006/03/27 16:37:01
- ID: 15046
- この記事の返信元:
- (なし)
- この記事への返信:
- [15049] Re[1]: Form_Load中に別FormをLoadしていますが・・・2006/03/27 16:53:36
- [15054] Re[1]: Form_Load中に別FormをLoadしていますが・・・2006/03/27 17:57:25
- ツリーを表示
> MainFormのロード直後に、Form1,2をロードすれば良いのですが、 本来なら、Application.Run に(Formではなく)ApplicationContext を 渡したたい所なのですが、Compact Framework では非サポートなんですよね…。 > また、MainFormをロードした時しか、Form1,2を2つロードする > ことはありません。 3 つのフォームを同時に表示させなければいけないのでしょうか? Pocket PC 系の OS の場合、各フォーム(ダイアログを除く)は、 http://msdn.microsoft.com/library/ja/jpdnnetcomp/html/NetCompactFrameWorkFAQ.asp の 4.8 にもあるように、一つのフォームが、画面いっぱいに表示されるのが 基本だと思いますので、複数表示させるなら、親子関係を持ったモーダル あるいはモードレスのダイアログにする事になると思いますが、各フォームの BorderStyle は、どのように設定されているのでしょうか?
■No15052に返信(まどかさんの記事) 何度も回答頂き、ありがとうございます。 > すいません、よく見ていなかったのですが、 > TopMostにするのは何か理由があるのでしょうか? TopMost = True にしたことで初めて最前面に画面が表示させたい為です。 > また、Form1,2のRefreshとFocusは確実に要りません。 > まだ描画されてませんので。 > Form1.Activateも特に要らないような気がします。 はい、判りました。 削除して確認したところ、影響なく表示されました。 ありがとうございます。 > Application.DoEvents() > Form1.Show() > Form2.Show() > とかだめですか? 上記の通り、MainFormのActivateイベント内に Private Sub MainForm_Activated(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Activated If InitFlag Then Application.DoEvents() frm1.Show() frm2.Show() End If End Sub としてみましたが、MainFormの裏側に画面が居るようです。 MainFormの終了と同時に、一瞬2つの画面が見えます。 MainFormが完全に表示しきった時間を待ってみて、仮にMainForm上にボタンを 貼り付け、frm1とfrm2を同時に呼び出してみました。 すると期待する通りの動きになるので、Activateイベントの終了時点で、 MainFormにFocusが移っているようです。 Activateイベント内でTimerを起動して、時間を稼ぐ方法で考えてみます。
分類:[.NET]
初めまして。
初めて投稿致します。至らない部分があるかも知れませんが宜しくお願い致します。
VB2005から始めたばかりです。
スマートデバイス(PDA)で動作するソフトを作成しています。
現在、下記のようにMainFormを起動させています。
MainFormのLoad内でForm1--->Form2の順で2つのLoadを実施しています。
表示上はForm2が最前面に来ていますが、Focusがないのか(?)、タイトル部分
はMainForm名が表示され、画面をタップした時点で漸くForm2のタイトルが表示
されます。Form2上のTextBoxにもカーソルがありません。
また、右上の×をタップすると、Form2が消え(Visible = False?)、Form1が
最上位画面になります。これはタイトルも画面部分も表示されています。
MainFormのロード直後に、Form1,2をロードすれば良いのですが、そのイベント
が判りません。また、MainFormをロードした時しか、Form1,2を2つロードする
ことはありません。
宜しくお願い致します。
Public Sub Main()
Application.Run(New MainForm)
End Sub
Private Sub MainForm_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim frm1 As New Form1
Dim frm2 As New Form2
frm1.Show()
frm1.Activate()
frm2.Show()
frm2.Activate()
End Sub
==== Form1 ====
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.Refresh()
Me.Focus()
Me.TopMost = True
End Sub
==== Form2 ====
Private Sub Form2_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.Refresh()
Me.Focus()
Me.TopMost = True
End Sub