如何将字符串作为c#中的面板名称

本文关键字:字符串 | 更新日期: 2023-09-27 18:28:40

我的面板显示可见性为false。我想当点击树视图列表时,该列表将检索我存储在数据库中的面板名称。我知道如何在字符串中从数据库中检索那个面板名称。但是,如何将"字符串"更改为面板,使其能够这样写:

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"是包含面板名称的字符串。我想更改这个面板的可见性。示例:panelToDisplay.visible = true;

如何将字符串作为c#中的面板名称

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集合仅存储第一级控件。如果包含在窗体的控件集合中的控件是控件容器,则它具有可以存储其他控件的控件集合。

编辑
从下面TaW的评论中,您也可以将Controls集合与字符串索引器一起使用

if(this.Controls.ContainsKey(panelToDisplay))
    this.Controls[panelToDisplay].Visible = false;