如何从C#中的TabPage获取控件?

时间:2012-02-19 17:38:04

标签: c# winforms

我有几个TabPages,每个都包含富文本框。如何在选定的选项卡上访问richtechbox?

TabPage selectedTab = tabControl.SelectedTab;
RichTextBox selectedRtb = selectedTab.Controls.Find("rtb", true).First() as RichTextBox;

这是我尝试过但没有运气。

加了:

这是使用richtextbox控件添加标签页的方式

TabPage newTab = new TabPage(name);
RichTextBox rtb = new RichTextBox();
rtb.Dock = DockStyle.Fill;
rtb.BorderStyle = BorderStyle.None;
rtb.Text = file.Data;
newTab.Controls.Add(rtb);
tabControl.TabPages.Add(newTab);
tabControl.SelectedTab = newTab;

3 个答案:

答案 0 :(得分:9)

如果这是WinForms,那就是:

if (selectedTab.Controls.ContainsKey("rtb"))
  RichTextBox selectedRtb = (RichTextBox)selectedTab.Controls["rtb"];

如果rtb是RichTextBox控件的名称。

创建控件时,请为其添加名称:

RichTextBox rtb = new RichTextBox();
rtb.Name = "rtb";

答案 1 :(得分:3)

您的方法无效的原因是您尝试使用控件的name属性来查找它。

查看代码时,您未设置Name属性。如果您可以提前生成已知名称,则可以在查找控件时使用该名称。

你也可以试试这个:

var rtb = tabControl.SelectedTab.Controls.Cast<Control>()
                                .FirstOrDefault(x => x is RichTextBox);

答案 2 :(得分:0)

Philip Fourie的答案非常好,让我意识到您实际上可以让Design生成或不生成控件的名称。

GenerateMember in Design

不知何故,我将GenerateMember设置为false,一旦将其重新打开,就可以直接通过其名称访问该控件。