[英]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个具有值panel0
, panel1
, panel2
等的字符串,并尝试将值分配给它的属性。 但是字符串不包含名为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.