如何在Windows窗体应用程序中显示类似的多个GUI面板

时间:2011-11-01 02:45:05

标签: c#

我有一个c#windows窗体应用程序,它具有与MSN类似的GUI功能。它的工作方式是,如果有通知,只有一个通知窗口出现,在这种情况下我将几个按钮和其他东西放在一个面板中。 (这是正确的方法吗?)

我如何对其进行编码,以便我可以使用arrayList将类似的面板添加到列表中并使用for循环来调用它。示例将通过使用arraylist(?)调用2或3个类似的面板,并使它们彼此出现。 (也许就像MSN通知窗口如何在另一个上面出现一样。)

面板的代码是

            this.panel1.Controls.Add(this.button1);
            this.panel1.Controls.Add(this.lblImage);
            this.panel1.Controls.Add(this.lblName);
            this.panel1.Controls.Add(this.lblLinkName);
            this.panel1.Controls.Add(this.lblLinkLocation);
            this.panel1.Controls.Add(this.lblLocation);
            this.panel1.Location = new System.Drawing.Point(13, 134);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(506, 100);
            this.panel1.TabIndex = 17;

我是否必须在设计器文件或编码文件中编写for循环?在我尝试在设计器代码文件中添加for循环后,设计器视图无法显示我的UI。

2 个答案:

答案 0 :(得分:1)

我猜这就是你要找的东西

for(int i = 0; i < panels.length; i++){
    AddPanel(panels[i], i);
}

AddPanel(System.Drawing.Point point, int tabIndex){
    Panel panel = new Panel();
    this.Add(panel);
    panel.Controls.Add(new Button());
    panel.Controls.Add(new Label("Image"));
    panel.Controls.Add(new Label("Name"));
    panel.Controls.Add(new Label("linkName"));
    panel.Controls.Add(new Label("linkLocation"));
    panel.Controls.Add(new Label("location"));
    panel.Location = point;
    panel.Name = "panel" + i.ToString();
    panel.Size = new System.Drawing.Size(506, 100);
    panel.TabIndex = tabIndex;
}

您需要使用您希望添加面板的点填充面板数组。

答案 1 :(得分:1)

我会创建一个自定义控件,其中包含每个项目所需的界面。让Control公开允许您以恒定方式访问子控件的属性,方法和事件。

您可以创建自定义控件的多个实例并将它们添加到List并将事件处理程序附加到它们等...

如果您使用流布局面板作为父级并将自定义控件的每个实例添加到其中,它将自动为您处理布局,而无需您手动定位它们。如果流布局位于具有自动滚动设置的容器内,您将拥有一个很好的滚动列表,其中包含您可以想到的任何类型的项目。

添加示例

使用名为ListItem的自定义控件。

ListItem item = new ListItem();
someFlowPanel.controls.add(item);

您应该将项目的宽度设置为您添加到的流动面板的宽度,并将其设置为左右锚定。