我正在嘗試從窗體顯示的事件中更改控件的可見狀態。如何訪問windows窗體中顯示的事件控件?
我正在從數據庫表中讀取控件的名稱並使用this.Controls["controlname"].Visible
來訪問它。但是一些控件無法從此事件中訪問。它顯示出例外。
如何從窗體顯示事件訪問控件?
我正在嘗試從窗體顯示的事件中更改控件的可見狀態。如何訪問windows窗體中顯示的事件控件?
我正在從數據庫表中讀取控件的名稱並使用this.Controls["controlname"].Visible
來訪問它。但是一些控件無法從此事件中訪問。它顯示出例外。
如何從窗體顯示事件訪問控件?
使用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
是找到它們的名稱:
string menuName = "copyToolStripMenuItem";
ToolStripItem[] matches = menuStrip1.Items.Find(menuName, true);
if (matches.Length > 0)
{
matches[0].Visible = true;
}
相同的代碼也適用於ToolStrips。例如,將menuStrip1
替換爲toolStrip1
。
我正在使用子窗口和容器父窗口。以上代碼在子窗口中工作,但不在父容器窗口中。 – user1690835
Controls.Find()無法在其他表單中找到控件。如果您需要在其中一個子窗體中查找控件,那麼首先需要對該子窗體的引用,然後對該子窗體調用Controls.Find()。 –
我想在容器窗體中顯示或隱藏菜單欄和工具條項目。以上代碼不適用於這些項目。 – user1690835
請問什麼例外... –
@KingKing它顯示爲空例外 – user1690835
[SSCCE](http://www.sscce.org/)會有幫助 –