这是一个非常简单的问题,但我找不到解决方案(如果这是原始的,我不是专业程序员,抱歉!)。在 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 或 Cancel 按钮。我不确定在这种特殊情况下您是否需要它。
更新
如果 Form2 不是对话框,则可以改为使用回调模式通知 Form1 Form2 正在关闭,以允许 Form1 从 Form2 检索它需要的任何值。或者,您可以让回调直接提供您需要的值。
具体来说,您可以将 a 传递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;
}