【问题标题】:Visual Studio Windows Form - pass data from seperate form (not parent) to Child MDIVisual Studio Windows 窗体 - 将数据从单独的窗体(非父窗体)传递到子 MDI
【发布时间】:2013-04-30 21:12:06
【问题描述】:

我找了又找,但找不到这个问题的答案。

如何在 Visual Studio Windows 窗体中将非父窗体中的数据传递给子 MDI。

场景:-

父级有一个菜单树,单击该菜单会打开一个子窗体,在该窗体内有一个按钮可以打开一个单独的具有数据绑定列表框的窗体。 我正在尝试将数据从这个单独的表单(准确地说是列表框上的选定项目)传递到子表单上的文本框。

我似乎只能找到如何在父母和孩子之间传递数据,反之亦然。

我真的很感激一些例子。

提前致谢。

【问题讨论】:

  • 子表单是否是模态的?

标签: windows forms visual-studio parent-child mdi


【解决方案1】:

你找不到这个可能是件好事,因为很多解决方案都不行。

快速且不太可怕的方法

定义接口

例如

public interface IOwnerValue
{
String SomeValue {get;set;}
}

将其添加到您的子表单并实现它 例如

public class ChildForm : Form, IOwnerValue
{

public String SomeValue
{
get {return SomeTextBox.Text;}
set {SomeTextBox.Text = value;}
}
}

然后重载子窗体的构造函数以获取 IChildValue 的参数。 并添加一个私人成员来持有它。 例如

private IOwnerValue _childValue;

Public MySubForm(IOwnerValue argValue) :base()
{
   _childValue = argValue;
}

然后在您的按钮单击处理程序中

说 使用 (MySubForm f = new Subform(this)) { f.ShowDialog(); }

那么当你想在 就是这样

if (_childValue != null)
{
_childValue.SomeValue =  SomeStringFromSomewhere;
}

您可以跳过界面,但是您必须将 ChildForm 和 Subform 类紧密耦合。想象一下,如果您想将子表单重用于不同类型的子表单,或者有一个执行类似操作的不同子表单。该接口可以让您保持解耦,更不用说编写一两个单元测试了。

另一种方法是将所有这些移到一个单独的类中,其中两个表单都引用了它的接口。一个设置属性。它有一个“Onchanged”事件。对它感兴趣的表单注册了一个事件处理程序。这对于一个文本值来说有点过分了,但是在两种形式之间。

如果有类似的东西,不管你怎么走

TheFormThatCreatedMe.SomeTextBox.Text = SomeString;

尖叫着逃跑。

【讨论】:

  • 您好托尼,非常感谢您的回答和迅速的反应。我可以看到它所取得的成就,但是当我使用 Visual Studio Windows 窗体并且您使用的代码是 .net 时,我正在努力实现它? (也许)大声笑。推我的运气,但你有没有机会为 Visual Basic 编辑这个。再次提前致谢。
  • 好吧,我认为您可以管理作业等。 VB.Net 和接口在这里。 msdn.microsoft.com/en-us/library/f6x8ydw5(v=vs.71).aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 2016-03-25
  • 2020-10-12
  • 2010-09-21
  • 1970-01-01
相关资源
最近更新 更多