У меня есть панель, видимость которой ложна. Я хочу, когда вы нажмете на список древовидных изображений, этот список будет извлекать имя панели, которое я хранил в базе данных. Я знаю, как получить это имя панели из базы данных в строке. Но как изменить эту "строку" на панель, чтобы написать так:
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 хранит элементы управления, размещенные в форме в коллекции 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;
Controls[name]
также должно работать, если оно существует.