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
;否则,请使用类型。