【问题标题】:retrieving the updated value of variable A on form2 closing? C#在 form2 关闭时检索变量 A 的更新值? C#
【发布时间】:2012-08-13 15:16:00
【问题描述】:

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

【问题讨论】:

    标签: c# forms variables formclosing


    【解决方案1】:

    如果您有一个被 Form2 更改的值,并且该值由 Form2 管理,您可以将其公开为 Form2 的属性,例如

    public class Form2
    {
        public string MyValue
        {
            get { return myValue; }
        }
    }
    

    然后你可以像这样检索它

    Form2 f2 = new Form2();
    f2.ShowDialog();
    string theValue = f2.MyValue;
    

    一般来说,您可能需要检查 ShowDialog() 返回的 DialogResult 以查看用户是否按下了例如确定或取消按钮。我不确定在这种特殊情况下您是否需要它。

    更新

    如果 Form2 不是对话框,您可以改为使用回调模式通知 Form1 Form2 正在关闭,以允许 Form1 从 Form2 检索它需要的任何值。或者,您可以让回调直接提供您需要的值。

    具体来说,您可以将Func<T> 传递给Form2,该Func<T> 指向Form1 中的回调方法。然后,当 Form2 确定它正在关闭时,它会调用 Func<T>。这里,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);
        }
    }
    

    【讨论】:

    • 这仅适用于 form2 是对话框的情况。
    • 唯一的问题是当我在 Form 2 中更新我的变量时,在 form1 中的值仍然没有更新。
    • @davenewza:调用示例显示了一个对话框,真的。但是检索值的方法适用于任何形式。
    • @davenewza:更新以显示在不是对话框时效果很好的答案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您可以处理form1 上的form2.FormClosing 事件。在那里,您可以在 form1 上检索您的值 form2.B(前提是它可以公开访问),因为 form2 正在关闭。

      form2.FormClosing += OnFormBClosing;
      
      private void OnFormBClosing(object sender, FormClosingEventArgs eventArgs)
      {
          A = form2.B;
      }
      

      【讨论】:

      • 我真的很想了解这里的 3 个反对票。来自常见问题解答:最重要的是,说实话。如果您看到错误信息,请投反对票。添加 cmets 指示具体是什么错误。提供您自己的更好的答案。最重要的是 - 编辑和改进现有的问题和答案!
      【解决方案4】:

      在关闭事件中使用

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

      MSDN Library

      【讨论】:

        【解决方案5】:

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

        我猜你是从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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-06
          • 2013-01-04
          相关资源
          最近更新 更多