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

时间:2013-02-23 12:14:34

标签: c# asp.net

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

谢谢&此致

1 个答案:

答案 0 :(得分:2)

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

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类继承自ContentControl,而Control继承自object parentReference = this.Parent; ,您只需执行此操作即可。

object

最好在这里使用typeof,然后检查它是否是Form表单,因为如果它在容器中,那么容器将被存储,如果变量可能会导致异常类型为Form parentReference = this.ParentForm;

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

null

但要注意的是,如果您刚刚创建了此动态控件并且尚未将其添加到任何表单或控件子列表中,则Parent和ParentForm将为null,因此请确保您验证public partial class Form1 : Form之前使用它或尝试将其作为某种东西进行投射。

然后,您可以通过执行此操作来使用表单中的任何属性。我假设您的主表单称为Form1。 (((Form1)parentReference).somePublicProperty = someValue;

{{1}}

希望它为你清除它。