2011-03-22 70 views
1

我在面板和樹視圖中添加了一個Panel和兩個LinkLabels。在winforms中使用控件(linklabels,treeview)

現在在panel_Paint事件中,我希望linklabel顏色變成白色,treeview的背景顏色變黑。 我該怎麼做?

下面的代碼工作時,纔會有在面板沒有樹視圖,但是當我在面板還可以添加一個TreeView,然後它說:

無法投類型的對象System.Windows.Forms.TreeView '鍵入'System.Windows.Forms.LinkLabel'。

foreach (LinkLabel link in panel1.Controls) 
{   
    link.LinkColor = Color.White; 
} 

回答

3

你的面板包含了所有的控制 - 其中之一是TreeView不能鑄造成LinkLabel。在你的循環,你需要檢查這樣的控件的類型:

foreach (Control control in panel1.Controls) 
{ 
    if (control is LinkLabel) 
    { 
     ... set link color 
    } 
    else if (control is TreeView) 
    { 
     ... set background 
    } 
} 

或者,如果你只有一個LinkLabel和一個TreeView你不會需要一個循環 - 只是名稱訪問他們像你一樣panel1

2

試試這個:

foreach (Control ctrl in panel1.Controls) 
{ 
    LinkLabel link = ctrl as LinkLabel; 
    if(link != null) 
     link.LinkColor = Color.White; 
} 
2

由於試圖將panel1中的所有控件都轉換爲LinkLabel,您會收到錯誤消息。你需要嘗試這樣的事情

foreach (Control control in panel1.Controls) 
{ 
     if (control.GetType() == typeof(LinkLabel)) 
     { 
      LinkLabel link = (LinkLabel)control; 
      link.LinkColor = Color.White; 
     } 
} 

希望這會有所幫助。

編輯:我知道有一種方法,但不知道100%的名稱或語法。請參閱下面的改進答案。

foreach (LinkLabel link in panel1.Controls.OfType<LinkLabel>()) 
{ 
    link.LinkColor = Color.White; 
} 

希望這對你更好。