如何将值从子窗体传递到父窗体[英] how to pass values from child form to parent form

本文是小编为大家收集整理的关于如何将值从子窗体传递到父窗体的处理方法,想解了如何将值从子窗体传递到父窗体的问题怎么解决?如何将值从子窗体传递到父窗体问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

如何在windows应用程序中将子c#表单的值传递给父表单

解决方案
这是关于表单协作的流行问题.最健壮的解决方案是在表单类中实现适当的接口,并传递接口引用而不是对 Form 的"整个实例"的引用.有关更多详细信息,请参阅我过去的解决方案:如何以两种形式复制列表框之间的所有项目[^].

另请参阅此讨论中的其他解决方案.如果应用程序足够简单,则解决方案可以简单到在一个表单中声明一些 internal 属性并将对一个表单实例的引用传递给另一个表单的实例.对于更复杂的项目,这种违反严格封装样式和松耦合的行为可能会增加代码的意外复杂度并引发错误,因此封装良好的解决方案是比较好.

另请参阅:
http://en.wikipedia.org/wiki/Accidental_complexity[^],
http://en.wikipedia.org/wiki/Loose_coupling[^].

—SA

取决于您如何显示您的表格.
如果你使用 ShowDialog 那么很简单:只需在子窗体中创建一个公共属性,然后在父窗体中直接访问它:
ChildForm child = new ChildForm();child.MyProperty = "Hello";child.ShowDialog();Console.WriteLine(child.MyProperty);

如果您改用 Show 则稍微困难一些 - 您必须创建属性和事件,或事件和自定义 EventArgs

在子窗体中:
public 部分  frmChild : 表格{public event EventHandler 改变了;protected 虚拟 void OnChanged(EventArgs e){EventHandler eh = 已更改;if (eh != null){eh(this, e);}}private void DoSomethingToChangeData(){OnChanged(null);}}
分配给 eh 是为了防止处理程序在 null 检查和 exec 之间发生变化(不太可能,但可能)
空检查是为了确保有一个处理程序.如果没有,最好优雅地忽略它,而不是依赖抛出的异常(NullReferenceException)

在父窗体中:
private void ShowChildForm(){frmChild fd = new frmChild();fd.Changed += new EventHandler(Changed);fd.Show();}private void 已更改(object 发件人,EventArgse){frmChild fc = 发件人 as frmChild;if (fc != null){Console.WriteLine(fc.MyProperty);}}

可能会有帮助,
在 Windows 窗体之间共享数据[^]

:)

本文地址:https://www.itbaoku.cn/post/1355856.html