当我需要将某些信息从表单传递到另一个表单时,我通常会执行以下操作:
Form2 form = new Form2(this);
form.ShowDialog();
在Form2.cs中,我使用了一个构造函数,如:
private Form1 parent;
public Form2(Form1 form)
{
...
parent = form;
}
这样,只有当textbox1不是Form1的私有成员时,我才能从一个文本框中获取一个信息,该文本框中的parent.textbox1.Text。好吧,我需要花很多时间来获取有关Form1中控件的信息,我应该为Form2中所需的控件的每个属性设置setter和getter吗?例如:我需要知道Text,ReadOnly和Location的值。我应该为这些属性中的每一个制作setter和getter吗?内部修饰语的使用是不好的做法吗?
答案 0 :(得分:2)
正确的方法是与代表一起。它们非常简单,但是需要一段时间才能理解它们。以下是我认为您正在寻找的一个很好的例子:http://samgaut.blogspot.com/2007/11/use-delegates-to-pass-data-between.html
答案 1 :(得分:1)
由于我不允许在答案中添加评论,我将添加此内容。
来自接受的答案的链接博客文章对我来说没有意义(可能只是我对代表缺乏透彻的理解)。
如果下一行格式frmDestination
具有可公开访问的setter方法(SetCustomerID(string strCustID)
),那么当您可以通过{{1}时,为什么需要将其传递给委托直接到setter?
我注意到他提到了
基本上,在执行Form_Load事件之前,将填充在委托方法中设置的成员变量。如果您注意到在进行frmDestination.Show()调用之前执行了委托调用。这样,您就可以在Form_Load处理中执行该变量。
在customerID
之前调用dest.SetCustomerID(customerID)
不会做同样的事情吗?
答案 2 :(得分:0)
从我所知道的情况来看,这不是一个可重用的框架,我不会在控件属性周围创建包装器属性。
如果有关于此父表单需要灵活的内容,那么正确的方法可能是使用指定存在的特定控件或特定基本表单类的接口。