2013-02-23 42 views

回答

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传递作为参考因为基元默认发送值)作为参数,并且从usercontrol的那一点将有权访问该对象。

当然这仅仅是存储引用一个简单对象的例子(你可以在你想分享或任何其他值一些类通过。)

如果你想访问你的用户控件中的父那么你应该记住,Control.Parent可以让你访问当前控件的父项。

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

object parentReference = this.Parent; 

这是一个更好的做法是在这里使用object,然后检查它是否是一个typeof形式,因为如果是在一个容器中,然后将容器将被保存,它可能会导致异常,如果变量类型为Form

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

Form parentReference = this.ParentForm; 

但要记住的事情是,如果你刚刚创造了这个动态控制,但尚未将其添加到任何形式或控制儿童列出父和ParentForm将null所以请确保您验证对于null之前使用它或试图把它作为东西。

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

((Form1)parentReference).somePublicProperty = someValue; 

希望它为您清除它。

+0

感谢Daniel Wardin先生的回答。它的形成方式非常感谢。 – Anjana 2013-02-24 05:52:31

+0

不客气Anjana! – 2013-02-24 12:32:37

相关问题