0

ここで答えのようなことをしたい:

ログイン フォームを閉じて、アプリケーションを閉じずにメイン フォームを表示するにはどうすればよいですか?

...しかし、初期フォームで選択した値を次の (メイン) フォームに渡したい。メイン フォームでオーバーライドされたコンストラクターを呼び出した場合、その間 (初期フォームが閉じられてからメイン フォームが呼び出されるまでの間) はどこに値を格納すればよいでしょうか?

OTOH、program.csファイルを使用してこれを行う代わりに、メインフォームのLoad()イベント内に「初期フォーム」を作成する場合(より良い場所はありますか)、このようなことを行うことができますが、確かにそうですかなり不器用です:

0) メイン フォームのサイズを 0,0 に設定して非表示にします 1) 「初期」フォーム/モーダル ダイアログを表示し、ユーザーが (ボタン クリック イベントで) 選択した値をフォーム グローバル変数に格納します 2) 一度、初期フォーム/モーダル ダイアログを閉じ、メイン フォームのサイズを元のサイズに戻します (モーダル結果 <> OK でない限り、この場合はメイン フォームとアプリを閉じます)。

これを行うためのより良い方法があることを知っています...

4

2 に答える 2

2

メインフォームに値を渡す必要はありません。リンクで説明されているように、最初にメインフォームを開きます。次に、メインフォームで他のフォームを開くことができます。この他のフォームは、メインフォームがアクセスできる公共の財産に情報を置くことができます。メインフォームはこの他のフォームの存続期間を制御するため、メインフォームは他のフォームのパブリックプロパティに保持されている情報を取得してから、他のフォームを閉じます。

string myVariable;

using (OtherForm otherForm = new OtherForm())
{
  otherForm.ShowDialog();
  myVariable = otherForm.OtherVariable;
}
于 2012-04-18T23:55:21.543 に答える
1

ApplicationContext (System.Windows.Forms.ApplicationContext) を使用してみてください。次の MSDN スレッドの例に示すように、複数のフォームを表示できます。また、データに関しては、一度作成される共通のデータ オブジェクトを持つことができます。フォームは、フォームを表示する前に渡されたデータ オブジェクトでインスタンス化されます。

http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext%28v=vs.100%29.aspx

于 2012-04-19T00:01:41.940 に答える