你找不到这个可能是件好事,因为很多解决方案都不行。
快速且不太可怕的方法
定义接口
例如
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;
尖叫着逃跑。