簡體   English   中英

如何訪問UserControl上的控件?

[英]How to access the controls on a UserControl?

我創建了兩個UserControl(分別命名為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);
}

您需要將用戶控件鍵入為您的控件。 UserControl1或UserControl2(不是UserControl)

正如亞當(Adam)所述,如果您尚未公開發布內容,則也需要處理。

在正確鍵入yoozerControl之后,如@Kenneth所說(對他+1),您需要將這些文本框公開為用戶控件的公共屬性:

public TextBox yourTB{
    get { return TextBox1; }
}

或者,為了更簡潔一點,只需公開一個屬性,該屬性返回文本框的text ,這似乎是您需要的。

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

在用戶控件上,選擇要公開的控件,然后查看屬性窗口。 將“修飾符”屬性更改為“公共”以使其更具可見性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM