当我需要将一些信息从一个表单传递到另一个表单时,我通常会执行以下操作:
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吗?例如:我需要知道文本、ReadOnly和Location的值。我应该为这些属性中的每一个创建setter和getter吗?使用内部修饰符是不是一种糟糕的做法?
发布于 2011-08-23 10:09:43
正确的方法是使用委托。它们真的很简单,但你需要一段时间才能理解它们。这是一个很好的例子,我认为你正在寻找:http://samgaut.blogspot.com/2007/11/use-delegates-to-pass-data-between.html
发布于 2016-04-30 01:38:09
由于我不被允许在答案中添加评论,因此我将添加以下内容。
来自接受答案的链接博客帖子对我来说没有任何意义(可能只是我缺乏对代表的透彻理解)。
如果下一行表单frmDestination有一个可公开访问的setter方法(SetCustomerID(string strCustID)),那么当您只需将customerID直接传递给setter时,为什么还要将其传递给委托呢?
我注意到他提到
基本上,在执行Form_Load事件之前,将填充在委托方法中设置的成员变量。如果您注意到,委托调用是在frmDestination.Show()调用之前执行的。这样,您就可以在Form_Load处理中执行该变量。
只是在dest.Show()之前调用dest.SetCustomerID(customerID)不会做同样的事情吗?
发布于 2011-08-23 10:07:17
据我所知,这不是一个可重用的框架,所以我不会在控件属性周围创建包装器属性。
如果这个父窗体有一些需要灵活的地方,那么正确的方法可能是使用一个接口来指定存在的特定控件或一个特定的基窗体类。
https://stackoverflow.com/questions/7155543
复制相似问题