【问题标题】:Panel control with variable name带变量名的面板控件
【发布时间】:2017-09-20 22:36:54
【问题描述】:

我有 25 个面板控件(可见错误)。 我想让它可见。

但它不起作用: (错误 1 ​​'string' 不包含 'Visible' 的定义,并且找不到接受“string”类型的第一个参数的扩展方法 'Visible'(您是否缺少 using 指令或程序集引用?) )

for (int i = 0; i < 25; i++)
{
    string panelID = "panel" + i.ToString();
    panelID.Visible = true;
}

帮助

【问题讨论】:

    标签: c# variables panels


    【解决方案1】:

    你的代码在很多方面都是错误的。

    实际上,您正在做的是创建 25 个字符串,其值为 panel0panel1panel2 等,并尝试为它的属性分配一个值。但是字符串不包含名为Visible 的属性,所以很明显你会得到一个错误。

    您要做的是在表单中获取Panel 类型的控件,并设置它们的值。

    foreach(var panel in this.Controls.OfType<Panel>())
    {
        panel.Visible = true;
    }
    

    警告:以上只会在您的最顶层表单中找到Panel 控件。如果有嵌套的控件,您可能需要编写一个方法来递归地找到它们。以上只是给你的想法。

    此外,如果您有多个 Panel 控件,并且您只想将这些面板名称的属性设置为符合您的命名约定,则可以将它们过滤掉。

    foreach(var panel in this.Controls.OfType<Panel>())
    {
        if( panel name fits your naming convention)
            panel.Visible = true;
    }
    

    在这里,您可以使用Regex、使用自定义函数等查找正确的面板名称。

    【讨论】:

    • 25 是示例。在我的代码中它是可变的。有时我想让 4 个面板有时 25 个可见(最多 25 个)
    • 是的,所以请按照我的指示行事。它将帮助您朝着正确的方向前进。
    • 因为,正如我所提到的,它会抓取您指定类型的所有顶级控件。如果您想在控件中使用控件,可以使用method like this
    【解决方案2】:

    您可以将所有动态创建的面板存储到一个集合中,您可以通过它们的名称引用它们。一个这样的集合是字典。

    public class Form1 : Form
    {
        Dictionary<string, Panel> panels = new Dictionary< string, Panel>();
        public void Form1_Load(object sender, EventArgs e)
        {
            for (var i = 0; i < 25; I++)
            {
                 Panel panel = new Panel();
                 panel.Name = "panel" + i.ToString();
                 this.Controls.Add(panel);
                 panels.Add(panel.Name, Panel);
             }
         }
    }
    

    现在您可以使它们可见/不可见,如下所示。

    private void ShowHidePanel(int panelNumber, bool visible)
    {
        panels["panel"+panelNumber.ToString()].Visible = visible ;
    }
    

    或者,如果您想显示或隐藏所有面板,您可以执行以下操作。

    private void ShowHidePanels(bool visible)
    {
        for (var i = 0; i < 25; i++)
        {
             panels["panel" + i.ToString()].Visible = visible;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多