从另一个类访问方法
本文关键字:方法 访问 另一个 | 更新日期: 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
(我所追求的)访问方法/对象!