【问题标题】:Multi child in MDIMDI 中的多个子项
【发布时间】:2014-07-30 18:42:39
【问题描述】:

我在 MDI 中有多个表单。我创建了同一个孩子几次,例如 3 次。我有一个要发送给所选孩子的数据,但它总是将数据发送给最新的孩子。

有示例代码:

f13 = new Excel_form(this, Convert.ToInt16(words[1].Substring(0, words[1].Length - 1)));
f13.MdiParent = this;
f13.FormClosed += new FormClosedEventHandler(f13_FormClosed);
f13.Show();

以及发送数据的功能:

f13.Odebrane(odebrane, ktory_form_pyta);

我想将数据发送到自己选择的形式。像这样的:

Form[] children = this.MdiChildren;
children[CHOSEN_CHILD].WindowState = FormWindowState.Normal;

它适用于 WindowState,但不适用于发送数据。 有可能吗?

【问题讨论】:

  • 它真的适用于WindowState,还是只是因为显示的是最新的孩子而看起来有效?
  • 嗯......你如何计算CHOSEN_CHILD?
  • @krillgar - 它对WindowState 工作得很好,出现了我选择的形式。我无法访问我想要的孩子的功能。我只能访问最新的。 @AdrianoRepetti - CHOSEN_CHILD 是正常的int。我在 ARRAY 中有所有孩子的地址。

标签: c# .net winforms children mdi


【解决方案1】:

它应该被强制转换为 Form 所在的类。

MdiChildren 是“表单”的集合,不会有您尝试使用的方法。

类似(children[CHOSEN_CHILD] as Excel_form).Odebrane(odebrane, ktory_form_pyta);

【讨论】:

  • 你是最好的。 :D 谢谢,这就是我的问题的解决方案。
【解决方案2】:

您可以获取所有表单,对其进行迭代,并通过 Tag 查找特定表单。

这是您创建新子代的方式:

f13 = new Excel_form(this, Convert.ToInt16(words[1].Substring(0, words[1].Length - 1)));
f13.MdiParent = this;
f13.Tag = 1; // int, string... whatever you want, Tag is object type.
f13.FormClosed += new FormClosedEventHandler(f13_FormClosed);
f13.Show();

迭代并找到特定的:

Form[] children = this.MdiChildren;
foreach (Form child in children)
{
     if(Convert.ToInt32(child.Tag) == 1) // Do something
     else // Do something else
}

【讨论】:

  • 它的工作原理和我上面的例子一样。我想访问所选孩子的功能。例如,您的示例不允许我:if(Convert.ToInt32(child.Tag) == 1) child.Odebrane(odebrane, ktory_form_pyta);
猜你喜欢
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多