1

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

感谢和问候

4

1 回答 1

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;
}

在母版页中,您可以简单地在给定的用户控件上调用此方法,传入您需要的任何对象(只要它不是原始值,如果它是原始值,则使用ref作为引用传递,因为原始值默认发送值)为一个参数,从那时起,用户控件将可以访问该对象。

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

如果您想访问用户控件中的父级,那么您应该记住,这Control.Parent使您可以访问当前控件的父级。

由于UserControl类继承自ContentControl其继而继承自Control你可以简单地做到这一点。

object parentReference = this.Parent;

最好object在此处使用,然后检查它是否为typeof表单,因为如果它在容器中,则容器将被存储,如果变量类型为Form.

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

Form parentReference = this.ParentForm;

但要记住的一点是,如果您刚刚创建了这个动态控件并且尚未将其添加到任何表单或控件子列表中,则 Parent 和 ParentForm 将null确保null在使用它或尝试强制转换之前进行验证它作为某种东西。

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

((Form1)parentReference).somePublicProperty = someValue;

希望它为你清除它。

于 2013-02-23T12:39:37.033 回答