2011-11-03 80 views
2

嗯,我搜索了很多,並找不到任何幫助。來自以編程方式添加多次的Usercontrol的訪問控制?

我有一個帶有選項卡的窗體。當我點擊一個按鈕時,會添加一個新選項卡,並將一個用戶控件添加到新選項卡中。

我不知道如何訪問第二個+選項卡上的控件。我可以從第一個標籤訪問用戶控件,只是沒有其他人。

這是我到目前爲止的代碼。

private void button1_Click(object sender, EventArgs e) 
{ 
    string title = "tabPage " + (tabControl1.TabCount + 1).ToString(); 
    TabPage newPage = new TabPage(title); 
    tabControl1.TabPages.Add(newPage); 

    UserControl1 newTabControl = new UserControl1(); 
    newPage.Controls.Add(newTabControl); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    label1.Text = userControl1.textBox1.Text; 
} 

所以,當我點擊一個按鈕,說2〜3次,以及如何得到的文本框中從該選項卡中的用戶控件的文本?

......也許我正在全力以赴呢?

+0

請勿將「C sharp」等內容添加到您的標題中。我們在[so]上使用了標籤。此外,該語言被命名爲「C#」,而不是「C sharp」。 –

+0

什麼是「userControl1」?它似乎與您動態創建的選項卡無關。 – dzendras

+0

userControl1只是usercontrol的名稱。該控件只是一個標籤和文本框。 usercontrol1.textbox1.text是我如何訪問添加到選項卡的用戶控件中的文本框的文本屬性。 –

回答

3

您需要延長的TabPage,並有包含子對象的屬性,例如:

public class ExtendedTabPage : TabPage 
{ 
    public UserControl1 UserControl { get; private set; } 

    public ExtendedTabPage(UserControl1 userControl) 
    { 
     UserControl = userControl; 
     this.Controls.Add(userControl); 
    } 
} 

然後,你可以,只要你仍然有它的一個引用通過.UserControl訪問它..喜歡所以:

ExtendedTabPage newTab = new ExtendedTabPage(new UserControl1()); 
tabControl1.TabPages.Add(newTab); 

newTab.UserControl.textBox1.Text = "New Tab User Control TextBox"; 

您還必須進入UserControl設計器文件並將文本框聲明從private更改爲public。

+0

此外,您可以將tabpages轉換回跟蹤後面的擴展表頁面,例如:(tabControl1.TabPages [3] as ExtendedTabPage).UserControl.textBox1.Text =「Changed」; – chemicalNova

+0

對。完美的作品。非常感謝。 –

+0

好吧,我很興奮地注意到它的工作原理,我錯過了新選項卡上沒有名稱的部分。 使用ExtendedTabPage時,您在哪裏輸入標籤名稱? –

相關問題