我有一个包含很多项目的列表框,每个项目都应该在其旁边打开一个面板。单击一个项目时,它将其相应的面板置于前面(这些面板都位于同一位置)。
我尝试使用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();
}
我正在尝试使用一个变量来获取所选项目的文本,然后在控件的名称中使用此变量(类似于如何在字符串中使用变量),但是它对我不起作用。有其他方法吗?还是不可能?
答案 0 :(得分:2)
您可以search用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();
}
}
答案 1 :(得分:1)
您可以使用Form对象的控件集合
var i = this.Controls.IndexOfKey("panel" + text);
if(i != -1) this.Controls[i].BringToFront();
答案 2 :(得分:-2)
wright语法是
panel1.Controls [(文本)]
其中text是您的字符串变量