![](/img/trans.png)
[英]Setting C# property value when you know its class name (not property name)
[英]Can you use a string in the name of the control when setting its property?
我有一個包含很多項目的列表框,每個項目都應該在它旁邊打開一個面板。 單擊一個項目時,它會將其相應的面板置於前面(這些面板都位於同一位置)。
我嘗試使用if語句檢查選定的索引,但這將導致1000的if語句,最終將導致混亂。
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// gets item text
string text = listBox1.GetItemText(listBox1.SelectedItem);
// brings panel to front
panel**the text string goes here**.BringToFront();
}
我試圖使用一個變量來獲取所選項目的文本,然后在控件的名稱中使用此變量(類似於如何在字符串中使用變量),但是它對我不起作用。 是否有其他替代方法?
您可以使用Controls.Find()
按名稱搜索 Controls.Find()
。 無論將其嵌套在其他容器中的深度如何,都可以找到它:
if (listBox1.SelectedIndex != -1)
{
string ctlName = "panel" + listBox1.SelectedItem.ToString();
Control ctl = this.Controls.Find(ctlName, true).FirstOrDefault();
if (ctl != null)
{
ctl.BringToFront();
}
}
您可以使用Form對象的控件集合
var i = this.Controls.IndexOfKey("panel" + text);
if(i != -1) this.Controls[i].BringToFront();
Wright的語法是
panel1.Controls [(文本)]
文本是您的字符串變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.