在winforms中使用控件(linklabels,treeview)

时间:2011-03-22 09:07:19

标签: c# .net winforms treeview linklabel

我在面板上添加了一个Panel和两个LinkLabel以及一个树视图。

现在在panel_Paint事件中,我希望linklabel颜色变为白色,树视图的背景颜色变为黑色。 我该怎么做?

以下代码仅在面板中没有树视图时才有效,但当我在面板中添加树视图时,它会说:

无法将“System.Windows.Forms.TreeView”类型的对象强制转换为“System.Windows.Forms.LinkLabel”。

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

3 个答案:

答案 0 :(得分: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

一样

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分: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;
}

希望这对你更好。