从另一个类访问方法

本文关键字:方法 访问 另一个 | 更新日期: 2023-09-27 18:32:23

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

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

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

我现在这样做是不可能的

,因为表单AddStation没有对MainForm的引用,但是我将如何做到这一点?如何从AddStation窗体运行方法MainForm.UpdateListBox

从另一个类访问方法

您可以在 Main 上订阅 FormClosing

 AddStation.FormClosing += new FormClosingEventHandler(AddStation_FormClosing);

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

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

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

编辑:您也可以在 AddStation 上声明自己的事件,并让 Main 订阅它:

在添加站上:

public event EventHandler TimeToUpdateListBox;

只要你认为合适(也许是点击了关闭AddStation的按钮):

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

在主上:

void AddStation_TimeToUpdateListBox(object sender, EventArgs e)
{
  UpdateListBox ();
}
您是否有

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

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

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

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

this.DialogResult = DialogResult.OK;

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

this.DialogResult = DialogResult.Cancel;

然后,您的代码不会执行列表框更新。

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

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

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

我相信

是邓斯滕删除了他的答案,但工作得很好。

我添加了

public MainForm mainForm;

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

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

现在我能够从AddStation(我所追求的)访问方法/对象!