0

这是一个非常简单的问题,但我找不到解决方案(如果这是原始的,我不是专业程序员,抱歉!)。在 Form1 中,我有一个名为“A”的变量,它的值为 1。我将其发送到 Form2 并将值更改为 2。在 Form2 关闭时,我需要将更新后的值发送到 Form1。最后一部分我不知道该怎么做,我需要你的帮助。如何在 form2 关闭时检索变量 A 的更新值?

4

5 回答 5

4

如果您有一个由 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);
    }
}
于 2012-08-13T15:21:03.320 回答
2

WinForm 有一个名为FormClosing. 右键单击表单并选择属性,在 IDE 右侧,您将获得属性。会有一个黄色的“闪电”图标。你会在FormClosing那里找到活动。现在在表单关闭时添加您想要的代码

于 2012-08-13T15:22:52.293 回答
2

您可以form2.FormClosingform1. 在那里,您可以在关闭时检索您的价值form2.B(前提是它是可公开访问的) 。form1form2

form2.FormClosing += OnFormBClosing;

private void OnFormBClosing(object sender, FormClosingEventArgs eventArgs)
{
    A = form2.B;
}
于 2012-08-13T15:23:45.427 回答
0

从结束事件使用

private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   //update 
}

MSDN 库

于 2012-08-13T15:25:20.957 回答
0

如果您可以发布您的实际源代码可能会更好。

我想你从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;
}
于 2012-08-13T15:27:40.247 回答