C# 从另一个类访问方法
我有一个简单的按钮,它将打开C# 从另一个类访问方法,c#,C#,我有一个简单的按钮,它将打开AddStation表单(此按钮位于main表单表单上): 它显示表单精细,但是表单AddStation有一个保存按钮。当按下此按钮时,AddStation表单关闭,但是我想运行MainForm类中的方法(更新MainForm上的列表框) 我现在这样做是不可能的,因为表单AddStation没有对main表单的引用,但是我将如何做呢?如何从AddStation窗体运行方法MainForm.UpdateListBox?您可以在Main上订阅FormClosing: A
AddStation
表单(此按钮位于main表单
表单上):
它显示表单精细,但是表单AddStation
有一个保存按钮。当按下此按钮时,AddStation
表单关闭,但是我想运行MainForm
类中的方法(更新MainForm
上的列表框)
我现在这样做是不可能的,因为表单
AddStation
没有对main表单的引用,但是我将如何做呢?如何从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的按钮时):
主要是:
void AddStation_TimeToUpdateListBox(object sender, EventArgs e)
{
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的按钮时):
主要是:
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>
}
这样做的好处是,如果表单上有“取消”按钮,则
this.DialogResult = DialogResult.Cancel;
那么您的代码就不会执行列表框更新。您使用变量代替实际的类对象有什么原因吗
通常我做的是这样做:
AddStation frmAddStation = new AddStation();
if (frmAddStation.ShowDialog() == DialogResult.OK) {
//<call your update listbox function here>
}
这样做的好处是,如果表单上有“取消”按钮,则
this.DialogResult = DialogResult.Cancel;
然后您的代码不执行列表框更新。将保存按钮的DialogResult设置为DialogResult.OK
。然后以这种方式显示第二个表单:
using(var AddStation = new AddStation())
{
if (AddStation.ShowDialog() == DialogResult.OK)
// update listbox
}
将保存按钮的DialogResult设置为DialogResult.OK
。然后以这种方式显示第二个表单:
using(var AddStation = new AddStation())
{
if (AddStation.ShowDialog() == DialogResult.OK)
// update listbox
}
您可以使用重载的Show方法并将主窗体作为所有者传递,然后在主窗体上调用相应的方法-您可以使用重载的Show方法并将主窗体作为所有者传递,然后在主窗体上调用相应的方法-我相信是Dunsten删除了他的答案,但效果很好 我补充说
public MainForm mainForm;
在我的AddStation
类的顶部,调用表单时,我使用以下命令:
var AddStation = new AddStation();
AddStation.mainForm = this;
AddStation.Show();
现在我可以从
AddStation
(我在后面)访问方法/对象了 我相信是邓斯滕删除了他的答案,但效果很好
我补充说
public MainForm mainForm;
在我的AddStation
类的顶部,调用表单时,我使用以下命令:
var AddStation = new AddStation();
AddStation.mainForm = this;
AddStation.Show();
现在我可以从
AddStation
(我在后面)访问方法/对象了 在方法作用域中,var
是一个隐式类型的变量。使用var
而不是AddStation
只是声明类型的另一种方式,而不是“类对象”。“类对象”是在声明右侧声明的对象。左侧是类型
。除了减少类型之外,为什么要对强类型对象使用var而不是显式声明类型?我理解为什么在构造LINQ语句时使用var,但不确定为什么在这里使用var,这更像是一种偏好,还是Microsoft正在推动开发人员使用这种语法?var
的使用已经过详细讨论。很好的讨论:。依我看,一般的经验法则是当右边显式声明类型时使用var
;否则,请使用类型。在方法作用域中,var
是隐式类型变量。使用var
而不是AddStation
只是声明类型的另一种方式,而不是“类对象”。“类对象”是在声明右侧声明的对象。左侧是类型
。除了减少类型之外,为什么要对强类型对象使用var而不是显式声明类型?我理解为什么在构造LINQ语句时使用var,但不确定为什么在这里使用var,这更像是一种偏好,还是Microsoft正在推动开发人员使用这种语法?var
的使用已经过详细讨论。很好的讨论:。依我看,一般的经验法则是当右边显式声明类型时使用var
;否则,请使用类型。