我有25个面板控件(可见false)。我想让它可见。
但这没有工作:(错误1"字符串"不包含"可见"的定义,也没有扩展方法"可见"接受类型"字符串"的第一个参数(您是否缺少使用指令或汇编引用?))
for (int i = 0; i < 25; i++)
{
string panelID = "panel" + i.ToString();
panelID.Visible = true;
}
帮助
您的代码在许多方面都是错误的。
,您正在做的是创建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;
}
}