2

私は2つのフォームを持っています。(Form1 と Form2) Form1_load メソッドを呼び出して、Form2 を作成します。

ただし、Form2 はまだ Form1 の下にあります。Form1 の上に Form2 を配置するにはどうすればよいですか? フルスクリーンフォームであり、ユーザーのタブ移動を拒否するため、form2.TopMost を true に設定したくありません。focus() を試しましたが、Form2 が前面に表示されません。

ユーザーがタブで戻る必要がある可能性があるため、Form1を非表示にしたくありません。

4

4 に答える 4

4

試しましたか: form2.BringToFront()?
編集:
を使用することもできますform2.ShowDialog()。これは、form1 にフォーカスする可能性なしに、フォームを前面に表示する必要があります。

于 2012-05-23T07:56:53.253 に答える
1

2 番目のフォームを開くのが早すぎます。Form の Load イベントは、フォームが公開される前に発生します。これは、Form 2 が Form1 の前に表示されることを意味します。したがって、これが表示されると Form1 によってカバーされます。

Form1 の Shown イベントが発生したときに Form2 を開くと、必要なものを取得できます。

于 2012-05-23T08:07:08.770 に答える
0

Form2.ShowDialog() メソッドを使用できます。これにより、Form2 を閉じるまでタブでフォーム 1 に戻ることができないことに注意してください。Form2 が Form1 のデータに依存する場合は、むしろ ShowDialog() を使用します。それ以外の場合は、Form1 のイベントに応じてスレッドとイベントを使用して Form2 を更新する必要があります。

于 2012-05-23T08:00:52.383 に答える
0

SetForegroundWindow(form2.Handle) を使用できます

次の宣言が必要です。

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

Load ハンドラーからこれを呼び出しているため、form1 の Load 後に form1 が先頭に移動したときに競合状態になる可能性があります。

于 2012-05-23T08:00:23.930 に答える