C#通过表单关闭事件传递对象

时间:2012-01-11 03:53:40

标签: c# forms events

我有一个我创建的表单,它应该加载与主表单分开的登录信息/设置。我想知道我是如何将这些信息从一种形式传递给另一种形式的。

我认为你需要使用形式封闭事件之类的东西(当表格关闭时我会传递信息)。但我不确定如何去做。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

这样做有两种常用方法。最直接的方法是向辅助表单添加一个新事件,该表单在完成加载的登录信息时引发。然后主表格可以收听此事件。一旦收到它,它就可以关闭帮助形式。

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);
  }
}