我有一个简单的按钮,可以打开AddStation
表单(此按钮放在MainForm
表单上):
var AddStation = new AddStation();
AddStation.Show();
它显示表单正常,但表单AddStation
有一个保存按钮。按下此按钮时,AddStation
表单已关闭,但我想运行MainForm
类中的方法(更新列表框中存在的列表框) MainForm
)。
我现在这样做是不可能的,因为AddStation
形式没有对MainForm
的引用,但我该如何做?如何从MainForm.UpdateListBox
表单运行方法AddStation
?
答案 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
访问方法/对象了(我之后)!