我正在尝试从显示的表单事件中更改控件的Visible状态。
我正在从数据库表中读取控件的名称并使用this.Controls["controlname"].Visible
访问它。但是有些控件无法从此事件中访问。它显示例外。
如何从表单显示的事件中访问控件?
答案 0 :(得分:2)
使用Controls.Find()来搜索。正如scheien指出的那样,控件可能位于一个不同的容器中,导致它不能用原始语法“找到”。这是一个简单的例子:
private void Form1_Shown(object sender, EventArgs e)
{
string ctlNameFromDatabase = "textBox1";
Control[] matches = this.Controls.Find(ctlNameFromDatabase, true);
if (matches.Length > 0)
{
// ... do something with "matches[0]" ...
// you may need to CAST to a specific type:
if (matches[0] is TextBox)
{
TextBox tb = matches[0] as TextBox;
tb.Text = "Hello!";
}
}
else
{
MessageBox.Show("Name: " + ctlNameFromDatabase, "Control Not Found!");
}
}
修改强>
对于MenuItems,您必须将数据库中的控件名称标记为“菜单项”,然后使用此代码(其中menuStrip1
是您的MenuStrip的名称)来查找它们:
string menuName = "copyToolStripMenuItem";
ToolStripItem[] matches = menuStrip1.Items.Find(menuName, true);
if (matches.Length > 0)
{
matches[0].Visible = true;
}
相同的代码也适用于ToolStrips。例如,将menuStrip1
替换为toolStrip1
。