设置控件的属性时,可以在控件名称中使用字符串吗?

时间:2019-02-15 19:03:01

标签: c# winforms

我有一个包含很多项目的列表框,每个项目都应该在其旁边打开一个面板。单击一个项目时,它将其相应的面板置于前面(这些面板都位于同一位置)。

我尝试使用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();
    }

我正在尝试使用一个变量来获取所选项目的文本,然后在控件的名称中使用此变量(类似于如何在字符串中使用变量),但是它对我不起作用。有其他方法吗?还是不可能?

3 个答案:

答案 0 :(得分:2)

您可以searchControls.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是您的字符串变量