如何访问windows窗体中的控件显示事件?

时间:2013-11-21 15:58:52

标签: c# winforms

我正在尝试从显示的表单事件中更改控件的Visible状态。

我正在从数据库表中读取控件的名称并使用this.Controls["controlname"].Visible访问它。但是有些控件无法从此事件中访问。它显示例外。

如何从表单显示的事件中访问控件?

1 个答案:

答案 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