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

本文关键字:控件 集合 选项 索引 | 更新日期: 2023-09-27 18:18:49

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

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

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

编辑:删除面板子问题中的窗口。它将移至一个单独的问题。

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

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

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

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

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

例如,

为了创建一个新表单,您需要创建一个您想要创建的任何形式的变量。例

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

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

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

封装复杂 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 有一些很好的资源 - 你应该利用它。