C#通过窗体关闭事件传递对象

本文关键字:事件 对象 窗体 | 更新日期: 2023-09-27 18:20:08

我创建了一个表单,用来加载与主表单分离的登录信息/设置。我想知道如何将这些信息从一个表单传递到另一个表单。

我想你需要使用表单关闭事件之类的东西(我本来打算在表单关闭时传递信息)。但我不太确定该怎么做。

C#通过窗体关闭事件传递对象

不,您通常会使用属性或字段来获得快速解决方案。在获取信息的表单中,从属性返回数据:

 public readonly int Age {
     get {
         return int.Parse(this.txtAge.Text);
     }
 }

例如。然后,在表单关闭后,您可以像访问任何其他属性一样访问它:

 SomeForm someForm = new SomeForm();
 someForm.ShowDialog();
 int userAge = someForm.Age;

有两种通用方法。最直接的方法是将一个新事件添加到helper表单中,该表单在加载登录信息完成时引发。然后主窗体可以收听此事件。一旦收到它,它就可以关闭辅助窗体。

class LoginInformationEventArgs : EventArgs {
  ...
}
class HelperForm : Form {
  ...
  public event EventHandler<LoginInformationEventArgs> LoginInformationLoaded;
  ...
}
class MainForm : Form { 
  LoginInformationEventArgs _loginInfo;
  public void ShowHelper() {
    var helper = new HelperForm();
    helper.LoginInformationLoaded += delegate (sender, e) {
      _loginInfo = e;
      helper.Close();
    };
    helper.Show();
  }
}

第二种方法是在辅助窗体上使用属性。窗体负责在关闭前设置这些属性,然后主对话框可以在完成后直接从辅助窗体中读取这些属性。

class LoginInformation { 
  ...
}
class HelperForm : Form {
  public LoginInformation { get; set; }
  private void OnCompleted() {
    LoginInformation = ...
    this.Close();
  }
}
class MainForm : Form { 
  public void ShowHelper() {
    var helper = new HelperForm();
    helper.ShowDialog(this);
    Process(helper.LoginInformation);
  }
}