从另一个类访问方法

时间:2012-04-27 13:58:37

标签: c#

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

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

它显示表单正常,但表单AddStation有一个保存按钮。按下此按钮时,AddStation表单已关闭,我想运行MainForm类中的方法(更新列表框中存在的列表框) MainForm)。

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

5 个答案:

答案 0 :(得分:3)

您可以在Main上订阅FormClosing

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

On Main:

void AddStation_TimeToUpdateListBox(object sender, EventArgs e)
{
  UpdateListBox ();
}

答案 1 :(得分:1)

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

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

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

然后,在AddStation上的“保存”按钮调用的功能中,请确保执行此操作:

this.DialogResult = DialogResult.OK;

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

this.DialogResult = DialogResult.Cancel;

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

答案 2 :(得分:0)

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

using(var AddStation = new AddStation())
{
   if (AddStation.ShowDialog() == DialogResult.OK)
      // update listbox
}

答案 3 :(得分:0)

您可以使用覆盖显示方法并将主窗体作为所有者&amp;然后在主窗体上调用适当的方法 - http://msdn.microsoft.com/en-us/library/szcefbbd.aspx

答案 4 :(得分:0)

我相信Dunsten删除了他的答案,但工作得很好。

我添加了

public MainForm mainForm;

在我的AddStation课程之上,然后在调用表格时我使用了这个:

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

现在我可以从AddStation访问方法/对象了(我之后)!