2

フォームAを開くメインフォームがあり、フォームAIからフォームBを開くことができ、フォームBIからフォームCを開くことができます。問題は、フォームBまで開くとすべてが正常に機能しますが、フォームCを開くと同様に、フォームCとBを閉じて、フォームAがメインフォームの後ろに移動します。フォームの場合、フォームのインスタンスを作成してから使用します.Show()

cNewForm form = new cNewForm();
form.Show();

私はすべてのフォームでこれを行っています

4

3 に答える 3

2

のパラメータなしバージョンを使用しているため、ウィンドウの所有権を適切に設定していませんShow()Show()所有者パラメーターを受け取るオーバーロードを呼び出して、所有者を設定する必要があります。Ownerまたは、プロパティを直接設定することもできますが、を呼び出すときに設定することをお勧めしますShow()

ウィンドウの所有者は、Win32の重要な概念です。このテーマに関するMSDNドキュメントを読むことをお勧めします。

  • 所有されているウィンドウは、常にzオーダーでその所有者の上にあります。
  • 所有者が破棄されると、システムは所有されているウィンドウを自動的に破棄します。
  • 所有者が最小化されると、所有ウィンドウは非表示になります。

あなたの場合、フォームAをメインフォームが所有し、フォームBをフォームAが所有し、フォームCがフォームBが所有するようにしたいと思います。

于 2013-01-31T13:37:23.687 に答える
1

この種の問題は、所有者をウィンドウに割り当てることで解決されることがよくあります。ウィンドウを表示するとき:

FormA formA = new FormA();
formA.Show(this); // assuming this code is in the main form
于 2013-01-31T13:35:16.793 に答える
0

モーダルフォームとして表示するために、ShowDialog();代わりにメソッドを使用してみてください。ドキュメントshow()を参照してください

于 2013-01-31T13:34:03.030 に答える