これは非常に単純な質問ですが、解決策を見つけることができませんでした(これが原始的である場合、私はプロのプログラマーではありません!)。Form1には「A」という変数があり、その値は1です。これをForm2に送信し、値を2に変更します。Form2を閉じるときに、更新された値をForm1に送信する必要があります。この最後の部分私はそれを行う方法がわかりません、そして私はあなたの助けが必要です。form2を閉じるときに変数Aの更新された値を取得するにはどうすればよいですか?
5 に答える
Form2によって変更された値があり、その値がForm2によって管理されている場合は、Form2のプロパティとして公開できます。
public class Form2
{
public string MyValue
{
get { return myValue; }
}
}
そして、あなたはそれを次のように取得することができます
Form2 f2 = new Form2();
f2.ShowDialog();
string theValue = f2.MyValue;
一般に、ShowDialog()によって返されるDialogResultをチェックして、ユーザーが[OK]ボタンや[キャンセル]ボタンなどを押したかどうかを確認することをお勧めします。この特定の場合にそれが必要かどうかはわかりません。
アップデート
Form2がダイアログでない場合は、代わりにコールバックパターンを使用して、Form2が閉じていることをForm1に通知し、Form1がForm2から必要な値を取得できるようにすることができます。または、コールバックに必要な値を直接提供させることもできます。
Func<T>
具体的には、Form1のコールバックメソッドを指すをForm2に渡すことができます。Func<T>
Form2は、閉じていると判断したときにそれを呼び出します。ここで、T
Form1に返す変数のタイプを表します。
T
文字列を想定した例を次に示します。
public Form2 : Form
{
public void MyCallback(string value) { /* Do something with value */
}
public Form1 : Form
{
Func<string> callback;
public Form1(Func<string> callback)
{
this.callback = callback;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (callback != null) callback(myValue);
}
}
WinFormには。というイベントがありますFormClosing
。フォームを右クリックしてプロパティを選択すると、IDEの右側にプロパティが表示されます。黄色の「稲妻」のようなアイコンが表示されます。FormClosing
そこにイベントがあります。次に、フォームが閉じているときに必要なコードを追加します
form2.FormClosing
でイベントを処理できform1
ます。そこで、終了時に値を取得できますform2.B
(公開されている場合form1
)form2
。
form2.FormClosing += OnFormBClosing;
private void OnFormBClosing(object sender, FormClosingEventArgs eventArgs)
{
A = form2.B;
}
クロージングイベントから使用
private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//update
}
実際のソースコードを投稿できればもっといいでしょう。
Form1からForm2を開いたと思いますよね?もしそうなら、form2の終了イベントからform1を更新しようとするこのようなものを書く方がおそらく良いと思います。
Form2 form2 = new Form2();
form2.A = this.A; // here this = form1
if (DialogResult.OK == form2.ShowDialog())
{
// So here, retrieve the property from form2.
this.A = form2.A;
}