2011-11-03 81 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时,您在哪里输入标签名称? –

相关问题