Можете ли вы использовать строку в имени элемента управления при установке его свойства? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть список со множеством предметов, и каждый предмет должен открывать панель рядом с ним.При щелчке по элементу соответствующая панель переносится на передний план (все панели расположены в одном и том же месте).

Я пытался использовать операторы if для проверки выбранного индекса, но это приведет кТысячи операторов 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 голосов
/ 15 февраля 2019

вы можете использовать коллекцию элементов управления объекта формы

        var i = this.Controls.IndexOfKey("panel" + text);
        if(i != -1) this.Controls[i].BringToFront();
0 голосов
/ 15 февраля 2019

Вы можете искать для элемента управления по имени с помощью 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();
    }
}
0 голосов
/ 15 февраля 2019

Синтаксис Райта:

panel1.Controls [(текст)]

где текст - ваша строковая переменная

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...