2014-11-01 48 views
1

我有面板,可見性是錯誤的。我想要點擊樹形列表時,該列表將檢索我存儲在數據庫中的面板名稱。我知道如何從字符串中的數據庫中檢索該面板名稱。但如何改變這種「串」到面板使其能寫出這樣的:如何把字符串作爲面板名稱在C#

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;

回答

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; 

明確循環記住形式儲存的控件集合只第一級控制。如果包含在Form's Controls集合中的控件是一個控件容器,那麼它的Controls集合可以存儲其他控件。

編輯
從下從TaW的評論,你也可以使用控件集合與字符串索引

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

其實'控制[名]'也應該工作,__if__它的存在。 – TaW 2014-11-01 21:13:36

+0

@TaW對於OP陳述的目的而言,這可能夠用了,但爲了找回強類型的Panel並使用其特定的屬性,您還需要添加一個Cast。將更新與您的評論的答案 – Steve 2014-11-02 11:38:46

相關問題