【问题标题】:Call mdi child methods from parent从父调用 mdi 子方法
【发布时间】:2012-03-14 23:10:55
【问题描述】:

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

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

string name = this.ActiveMdiChild.Name.ToString();

而且我所有的 MDI 子窗体都有一个保存方法。

public void SaveForm()
{
//Some code here
}

如何以编程方式调用 SaveForm 方法?

如果这不是最佳做法,您有什么建议?

【问题讨论】:

  • Mdi 表单的类型是什么?
  • “类型”是什么意思? public partial class EmpresasView : Form, IEmpresas ??
  • 这就是我想要的。我会更新我的答案

标签: c# winforms mdi


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答 Jared,只有一个问题,如果我已经知道 ActiveMdiChild,还需要遍历孩子吗?
  • @JorgeZapata 我想离开你的问题的标题。如果您只想保存活动的,那么您可以在 ActiveMdiChild 值上执行循环的内部主体
【解决方案2】:

让您的子窗体实现一个接口,该接口定义您希望您的 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();
}

【讨论】:

  • 我没有注意到表单已经实现了 IEmpresas -- 该接口是否定义了 Save 方法?
  • 是的,IEmpresas中有SaveForm方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2019-03-22
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多