Как поставить строку как имя панели в C #

1

У меня есть панель, видимость которой ложна. Я хочу, когда вы нажмете на список древовидных изображений, этот список будет извлекать имя панели, которое я хранил в базе данных. Я знаю, как получить это имя панели из базы данных в строке. Но как изменить эту "строку" на панель, чтобы написать так:

panelNamethatLoadFromDB.visible = true;

Мой код:

DataTable dtPanelToView = MyLibrary.getResults("SELECT LEVEL1_ID, LEVEL1_PATH FROM LEVEL1_TREEVIEW WHERE LEVEL1_DESC='" + clickLink + "'");
if (dtPanelToView.Rows.Count > 0)
{
string panelToDisplay = dtPanelToView.Rows[0]["LEVEL1_PATH"].ToString();
}

Итак, в настоящее время это "panelToDisplay" - это строка, содержащая имя панели. Я хочу изменить эту панель visibilty. Пример: panelToDisplay.visible = true;

Теги:
winforms
controls
panel

1 ответ

3

WinForms хранит элементы управления, размещенные в форме в коллекции Form.Controls.
Вы можете перебрать эту коллекцию, чтобы найти свою панель

 foreach(var pan in yourForm.Controls.OfType<Panel>())
 {
     if(pan.Name == panelToDisplay)
     {
        pan.Visible = true;
     }
 }

Используя расширения IEnumerable, вы также можете избежать явного цикла с помощью

 var pan = yourForm.Controls.OfType<Panel>().FirstOrDefault(x => x.Name == panelToDisplay);
 if(pan != null)
     pan.Visible = true;

Имейте в виду, что в коллекции Controls формы хранится только первый уровень элементов управления. Если элемент управления, содержащийся в коллекции Form Controls, является контейнером управления, то он имеет свою коллекцию Controls, в которой могут храниться другие элементы управления.

РЕДАКТИРОВАТЬ
Как и в приведенном ниже комментарии от TaW, вы также можете использовать коллекцию Controls с индексом строки

if(this.Controls.ContainsKey(panelToDisplay))
    this.Controls[panelToDisplay].Visible = false;
  • 3
    На самом деле Controls[name] также должно работать, если оно существует.
  • 0
    @ Да, для целей, указанных в OP, этого может быть достаточно, но чтобы вернуть строго типизированную Panel и использовать ее специфические свойства, необходимо добавить также приведение. Обновлю ответ с вашим комментарием

Ещё вопросы

Сообщество Overcoder
Наверх
Меню