具有变量名称的面板控件

时间:2017-09-20 22:36:55

标签: c# variables panels

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

但它没有'工作: (错误1'字符串'不包含'可见'以及没有扩展方法的定义'可见'接受类型'字符串&#39的第一个参数;可以找到(你错过了使用指令或程序集引用吗?) )

fs.readFileSync(cliJsonPath, 'utf8').substring(1)

帮助

2 个答案:

答案 0 :(得分: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查找正确的面板名称,使用自定义功能等。

答案 1 :(得分:1)

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

import {one, two} from "path/to/component"

现在您可以将它们视为可见/不可见。

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 ;
}
相关问题