索引到选项卡控件上的控件集合

时间:2011-12-27 17:41:47

标签: c# winforms tabs panel tabcontrol

我有一个C#Forms选项卡应用程序。每个TabPage左侧都有一个菜单(Outlook样式导航面板),右侧有一个Panel用于内容。

如果我想要标签页0的内容面板,我将如何获取它?我有点难过,因为我不知道如何在标签页上索引控件集合。以下用红色下划线,所以我认为它错了。

Panel panel = tabControl.TabPages[0].Controls["Panel"];

编辑:删除Panel子问题中的Window。它将被转移到一个单独的问题。

抱歉初学者问题。我是一个拥有大量MFC时间的C / C ++人,而C#UI目前有点令人沮丧。

4 个答案:

答案 0 :(得分:1)

为了创建一个新表单,例如,您需要创建一个您想要创建的表单的变量。 示例

Form2 frm2 = new Form2();
frm2.Show(); 

如果您想在面板中显示该表单,那么面板将是所有者,请记住所有者和父级之间的区别 请粘贴到目前为止您所拥有的代码,我们可以建议必要的更改

答案 1 :(得分:1)

foreach (Control control in tabControl1.TabPages[0].Controls)
{
    // if (control.Name == "panel1")
}

您始终可以在control.Controls上递归调用此方法以查找任何层次结构中的控件。 control.Name可用于查找您的特定控件。

您无法在面板内显示表单。您可以创建自定义控件,您可以在其中添加功能并将该控件添加到Panel。

答案 2 :(得分:1)

Finally, how does one display a Window in a Panel? - 你不想这样做。如果您希望窗口和面板共享一段UI功能,请创建一个包含所有功能的用户控件,然后您可以将其放在表单或面板中。

答案 3 :(得分:1)

封装复杂UI内容的可能性是创建UserControl。通过这种方式,您可以创建一个可重用的复杂UI,您基本上可以在表单中添加“blob”。

原因

Panel panel = tabControl.TabPages[0].Controls["Panel"];
带有下划线红色的

是因为Controls集合返回的Control可能是Panel,但也可能是其他内容。所以你需要施展它:

Panel panel = tabControl.TabPages[0].Controls["Panel"] as Panel;
if (panel != null)
{
     // got a panel here so do something
}

另外:MSDN有一些很好的资源 - 你应该使用它。