Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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
Visual Studio Windows窗体-将数据从单独的窗体(非父窗体)传递到子MDI_Windows_Forms_Visual Studio_Parent Child_Mdi - Fatal编程技术网

Visual Studio Windows窗体-将数据从单独的窗体(非父窗体)传递到子MDI

Visual Studio Windows窗体-将数据从单独的窗体(非父窗体)传递到子MDI,windows,forms,visual-studio,parent-child,mdi,Windows,Forms,Visual Studio,Parent Child,Mdi,我找了又找,但找不到这个问题的答案 在visual studio windows窗体中,如何将数据从非父窗体传递到子MDI 情景:- 父级有一个菜单树,单击菜单打开一个子窗体,在这个窗体中有一个按钮打开一个单独的窗体,该窗体有一个数据绑定列表框。 我试图将数据从这个单独的表单(确切地说是列表框上的一个选定项)传递到子表单上的一个文本框 我所能找到的似乎就是如何在父母和孩子之间传递数据,反之亦然 我非常希望能举一些例子 提前感谢。您可能找不到这一点,因为很多解决方案都是naff 快速且不太可怕的方

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

在visual studio windows窗体中,如何将数据从非父窗体传递到子MDI

情景:-

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

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

我非常希望能举一些例子


提前感谢。

您可能找不到这一点,因为很多解决方案都是naff

快速且不太可怕的方式

定义接口

e、 g

将其添加到子窗体并实现它 e、 g

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

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

说 使用(MySubForm f=新的子表单(this)) { f、 ShowDialog(); }

然后,当您要在 只是有点像

if (_childValue != null)
{
_childValue.SomeValue =  SomeStringFromSomewhere;
}
TheFormThatCreatedMe.SomeTextBox.Text = SomeString;
您可以跳过接口,但随后必须将子窗体和子窗体类紧密耦合。想象一下,如果您想为不同类型的子窗体重用该子窗体,或者有一个执行类似操作的不同子窗体。该接口使您能够保持事物的解耦,更不用说编写一两个单元测试了

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

不管你走哪条路,如果它有

if (_childValue != null)
{
_childValue.SomeValue =  SomeStringFromSomewhere;
}
TheFormThatCreatedMe.SomeTextBox.Text = SomeString;

尖叫着跑开。

子表单是模态还是非模态?嗨,托尼,非常感谢你的回答和快速响应。我可以看到它实现了什么,但是我正在努力实现它,因为我使用的是visual studio windows窗体,而您使用的代码是.net??(也许)哈哈。祝我好运,但是你有没有可能为visual basic编辑这个。再一次,提前谢谢你。我想你可以安排任务之类的。Net和接口在这里。
TheFormThatCreatedMe.SomeTextBox.Text = SomeString;