如何访问UserControl上的控件?

时间:2012-06-06 17:44:28

标签: c# winforms dynamic user-controls

我创建了两个UserControls(名为UserControl1和UserControl2)并动态地将一个添加到面板中:

UserControl yoozerControl;
if (pi != pie) {
    yoozerControl = new UserControl1();
} else {
    yoozerControl = new UserControl2();
}
panel1.Controls.Add(yoozerControl);
yoozerControl.Dock = DockStyle.Fill;

但是,我无法访问UserControls的成员。例如,UserControl1有一个TextBox1,但这不会编译:

UserControl yoozerControl;
if (pi != pie) {
    yoozerControl = new UserControl1();
    String s = yoozerControl.TextBox1.Text;
. . .

我该怎么做才能访问UserControls上控件的属性?

更新

// I was able to successfully test this by changing UserControl1's TextBox1 Modifier
// property to public, and the same with UserControl2's label1 Modifier property.
UserControl1 yoozerControl = null;
UserControl2 yowzerControl = null;
String s = String.Empty;
if (AppType.Equals(SearchTypes.Platypus)) {
    yoozerControl = new UserControl1();
    s = yoozerControl.textBox1.Text;
} else {
    yowzerControl = new UserControl2();
    s = yowzerControl.label1.Text;
}
    if (!(null == yoozerControl)) {
    panel1.Controls.Add(yoozerControl);
    yoozerControl.Dock = DockStyle.Fill;
    MessageBox.Show(s);
}
if (!(null == yowzerControl)) {
    panel1.Controls.Add(yowzerControl);
    yowzerControl.Dock = DockStyle.Fill;
    MessageBox.Show(s);
}

3 个答案:

答案 0 :(得分:4)

您需要输入用户控件作为您的控件。 UserControl1或UserControl2(不是UserControl)

正如亚当提到的,如果你还没有公开的东西,你也需要处理它。

答案 1 :(得分:3)

在你正确输入yoozerControl之后,正如@Kenneth所说(给他+1),你需要将这些文本框公开为你的用户控件的公共属性:

public TextBox yourTB{
    get { return TextBox1; }
}

或者,为了更清洁一点,只需公开一个返回文本框的文本的属性,这就是您所需要的。

public string yourTBsText {
    get { return TextBox1.Text; }
}

答案 2 :(得分:2)

在用户控件上,选择要公开的控件并查看属性窗口。将“修改器”属性更改为“公共”以使其具有最大可见性。