在用户控件中访问用户控件和主页面值中的控件

如何在用户控件中的母版页和母版页控件值中访问用户控件中的控件值?

感谢和问候

您最好的选择是以与下面类似的方式在用户控件中创建公共属性:

public TextBox getMyTextBox() { return this.myTextBox; } 

这将使母版页作为一个整体访问控件。 如果您只想获得一个或两个值,那么执行以下操作:

 public String getMyTextBoxValue() { return this.myTextBox.Text; } 

根据您希望能够从母版页在用户控件中访问的内容,您可以在创建用户控件时传入对该对象的引用(作为构造函数中的参数)

 private object needObject; public MyUserControl(object objectToReference) { this.needObject = objectToReference; } 

这样您就可以引用该对象。 如果你动态地创建控件 – 这将很容易。 如果您从一开始就想在表单设计中使用它们,那么请为您设置一个单独的方法来设置引用。

 public void setParentReference(object objectToReference) { this.needObject = objectToReference; } 

在母版页中,您可以在给定的usercontrol上调用此方法,传入您需要的任何对象(只要它不是基元,如果它是原始值,则使用ref作为引用传递,因为基元默认发送值)作为参数,从usercontrol上的那一点开始就可以访问该对象。

当然,这只是存储对简单对象的引用的一个示例(您可以传入一些您想要共享的类或任何其他值。)

如果要访问usercontrol中的父级,则应记住Control.Parent允许您访问当前控件的父级。

由于UserControl类inheritance自ContentControl ,而ContentControlinheritance自Control您可以简单地执行此操作。

 object parentReference = this.Parent; 

这是一个更好的做法,在这里使用object ,然后检查它是否是一个typeof表单,因为如果它在容器中,那么容器将被存储,如果变量类型是Form ,它可能导致exception。

您也可以使用它来获取ParentForm。

 Form parentReference = this.ParentForm; 

但要记住的是,如果您刚刚创建了这个动态控件并且还没有将它添加到任何表单或控件子列表中,则Parent和ParentForm将为null因此请确保在使用它或尝试之前validationnull把它当作某种东西。

然后,您可以通过执行此操作来使用表单中的任何属性。 我假设您的主表单称为Form1。 ( public partial class Form1 : Form

 ((Form1)parentReference).somePublicProperty = someValue; 

希望它为你清除它。