0

我有一个简单的按钮可以打开AddStation表单(这个按钮放在MainForm表单上):

var AddStation = new AddStation();
AddStation.Show();

它显示表单很好,但是表单AddStation有一个保存按钮。按下此按钮时,AddStation表单将关闭,我想运行MainForm's 类中的方法(以更新存在于 上的列表框MainForm)。

这不可能是我现在这样做的方式,因为表单AddStation没有对 的引用MainForm,但我将如何做到这一点?如何MainForm.UpdateListBoxAddStation表单运行该方法?

4

5 回答 5

3

您可以FormClosing在 Main 上订阅:

 AddStation.FormClosing += new FormClosingEventHandler(AddStation_FormClosing);

然后在 Main 上执行以下操作:

void AddStation_FormClosing(object sender, FormClosingEventArgs e)
{
  UpdateListBox ();
}

当然,这会在表单关闭时触发。

已编辑: 您还可以声明自己的事件AddStation并让 Main 订阅它:

在 AddStation 上:

public event EventHandler TimeToUpdateListBox;

并且每当您认为合适时(可能是单击关闭 AddStation 的按钮时):

if (TimeToUpdateListBox != null)
  TimeToUpdateListBox(this, new EventArgs());

在主要:

void AddStation_TimeToUpdateListBox(object sender, EventArgs e)
{
  UpdateListBox ();
}
于 2012-04-27T14:04:10.160 回答
1

您是否有理由为 AddStation 使用 var 而不是实际的类对象?

通常我所做的是做这样的事情:

AddStation frmAddStation = new AddStation();
if (frmAddStation.ShowDialog() == DialogResult.OK) {
    //<call your update listbox function here>
}

然后在 AddStation 上的 Save 按钮调用的函数中,确保执行以下操作:

this.DialogResult = DialogResult.OK;

这样做的好处是,如果您的表单上有一个取消按钮,如果您设置

this.DialogResult = DialogResult.Cancel;

然后您的代码不会执行 ListBox 更新。

于 2012-04-27T14:04:25.363 回答
0

将保存按钮的 DialogResult 设置为DialogResult.OK。然后以这种方式显示第二种形式:

using(var AddStation = new AddStation())
{
   if (AddStation.ShowDialog() == DialogResult.OK)
      // update listbox
}
于 2012-04-27T14:05:47.980 回答
0

您可以使用重载的 Show 方法并将主窗体作为所有者传递,然后在主窗体上调用适当的方法 - http://msdn.microsoft.com/en-us/library/szcefbbd.aspx

于 2012-04-27T14:06:19.990 回答
0

我相信是邓斯滕删除了他的答案,但效果很好。

我添加了

public MainForm mainForm;

在我的AddStation课堂上,然后在调用表单时我使用了这个:

var AddStation = new AddStation();
AddStation.mainForm = this;
AddStation.Show();

现在我可以从AddStation(我追求的)访问方法/对象!

于 2012-04-27T14:14:43.813 回答