繁体   English   中英

具有变量名称的面板控件

[英]Panel control with variable name

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

但是它不起作用:(错误1'字符串'不包含'可见'的定义,并且找不到扩展方法'可见'接受类型为'字符串'的第一个参数(您是否缺少using指令或程序集?参考?)

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

救命

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

panel0 panel1 ,您正在做的是创建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自定义功能等来查找正确的面板名称。

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

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM