2014-12-05 47 views
0

我正在使用表单生成器,它允许我输入选择自定义代码。我试图建立一个基本的窗口管理器来显示和隐藏面板。我使用的。可见,并System.Drawing.Point这种形式的OnClick:在C#中使用基本表单生成器构建管理面板列表

public void togglePanel(Panel panel) 
{ 
    if(panel.Visible) 
    { 
     panel.Visible = false; 
    } 
    else 
    { 
     panel.Visible = true; 
     panel.Position = new System.Drawing.Point(panel1.Right + 5, panel1.Top); 
    } 
} 

目前closeAllPanels只是声明的一个长长的清单,即panel2.Visible = false;

我怎样才能产生这些面板的名单?我可以使用GetMembers()方法吗?我是C#的新手,所以我不确定哪个类需要运行GetMembers()来生成该列表。

还是有一个更简单的方法,我完全失踪?

+0

熟悉'Controls'例如'的foreach(控制中的x this.Controls){}'然后检查“if(x是面板)”例如..使用循环缩短设置Panels Visible Property的硬编码。 – MethodMan 2014-12-05 19:38:39

回答

2

如果所有的面板将永远是在同一容器中,然后像做:

 List<Panel> Panels = new List<Panel>(this.Controls.OfType<Panel>()); 
     Console.WriteLine("# of Panels: " + Panels.Count.ToString()); 
     foreach(Panel pnl in Panels) 
     { 
      Console.WriteLine(pnl.Name + ": Visible = " + pnl.Visible.ToString()); 
     } 

您可以替换“本”与容器的名字,如果小组不直接被包含形成自己。

为了得到 “按姓名” 与Controls.Find()将一个面板的引用:

 string panelName = "panel1"; 
     Control[] matches = this.Controls.Find(panelName, true); 
     if (matches.Length > 0 && matches[0] is Panel) 
     { 
      Panel pnl = (Panel)matches[0]; 
      // ... do something with "pnl" ... 
     } 
+0

这正是我所想的!不幸的是,表单构建器是如此锁定它不会让我建立一个任何列表,我想过使用一个字符串[],但这会使元素不可操作,不是吗? – ourweakness 2014-12-05 22:12:14

+1

如果您有Panel名称,则可以使用Controls.Find()获取对它的引用。 – 2014-12-05 22:15:41

+0

会是什么样子? – ourweakness 2014-12-05 22:29:27

相关问题