Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从父级调用mdi子方法_C#_Winforms_Mdi - Fatal编程技术网

C# 从父级调用mdi子方法

C# 从父级调用mdi子方法,c#,winforms,mdi,C#,Winforms,Mdi,我在MDI父窗体中有一个保存按钮,每次用户单击此按钮时,我都想调用活动MDI子窗体中的某些方法 假设我将activemdichild.name存储在变量中 string name = this.ActiveMdiChild.Name.ToString(); 我所有的MDI子窗体都有一个保存方法 public void SaveForm() { //Some code here } 如何以编程方式调用SaveForm方法 如果这不是最佳实践,您有什么建议?假设MDI表单子项的类型是MyMdiF

我在MDI父窗体中有一个保存按钮,每次用户单击此按钮时,我都想调用活动MDI子窗体中的某些方法

假设我将activemdichild.name存储在变量中

string name = this.ActiveMdiChild.Name.ToString();
我所有的MDI子窗体都有一个保存方法

public void SaveForm()
{
//Some code here
}
如何以编程方式调用SaveForm方法


如果这不是最佳实践,您有什么建议?

假设MDI表单子项的类型是MyMdiForm,您可以执行以下操作

foreach (var form in MdiChildren) {
  var view = form as IEmpresas;
  if (view != null) {
    view.SaveForm();
  }
}

假设MDI表单子项的类型为MyMdiForm,则可以执行以下操作

foreach (var form in MdiChildren) {
  var view = form as IEmpresas;
  if (view != null) {
    view.SaveForm();
  }
}

让您的子窗体实现一个接口,该接口定义了您希望mdi子窗体实现的内容

例如:

IChildWindow
{
  void Save()
}

public class MyChildClass : IChildWindow
{
  public void Save()
  {
  }
}
然后在mdi父窗体中:

foreach (var child in MdiChildren)
{
  var childAsIWindow = child as IChildWindow;
  if (childAsIWindow == null) throw new InvalidOperationException("Not a IChildWindow");
  // or you could just ignore them.

 childAsIWindow.Save();
}

让您的子窗体实现一个接口,该接口定义了您希望mdi子窗体实现的内容

例如:

IChildWindow
{
  void Save()
}

public class MyChildClass : IChildWindow
{
  public void Save()
  {
  }
}
然后在mdi父窗体中:

foreach (var child in MdiChildren)
{
  var childAsIWindow = child as IChildWindow;
  if (childAsIWindow == null) throw new InvalidOperationException("Not a IChildWindow");
  // or you could just ignore them.

 childAsIWindow.Save();
}

Mdi表单的类型是什么?您所说的“类型”是什么意思?公共部分课程EMPRESSVIEW:表格,IEmpresas??这就是我要找的。我会更新我的答案Mdi表格的类型是什么?你说的“类型”是什么意思?公共部分课程EMPRESSVIEW:表格,IEmpresas??这就是我要找的。我将更新我的回答我没有注意到表单已经实现了IEmpresas-该接口是否定义了保存方法?是的,IEmpresas中有一个保存表单方法我没有注意到表单已经实现了IEmpresas-该接口是否定义了保存方法?是的,IEMPRESASTANKS中有一个保存表单方法感谢您的回答Jared,只有一个问题,如果我已经认识一个孩子,那么有什么必要反复讨论孩子们呢?@JorgeZapata我已经偏离了你问题的标题。如果您只想保存活动的,那么您可以在ActiveMdiChild值上执行内部循环。谢谢您的回答,Jared,只有一个问题,如果我已经知道ActiveMdiChild,那么有什么必要遍历子对象?@JorgeZapata我已经离开了您问题的标题。如果您只想保存活动的,那么您可以对ActiveMdiChild值执行循环的内部主体