我有25个面板控件(Visible false)。 我想让它可见。
但它没有'工作: (错误1'字符串'不包含'可见'以及没有扩展方法的定义'可见'接受类型'字符串&#39的第一个参数;可以找到(你错过了使用指令或程序集引用吗?) )
fs.readFileSync(cliJsonPath, 'utf8').substring(1)
帮助
答案 0 :(得分:1)
你的代码在很多方面都是错误的。
实际上,您正在创建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
查找正确的面板名称,使用自定义功能等。
答案 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 ;
}