1

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

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

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

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

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

3 回答 3

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

于 2011-03-22T09:12:53.197 回答
2

试试这个:

foreach (Control ctrl in panel1.Controls)
{
     LinkLabel link = ctrl as LinkLabel;
     if(link != null)
        link.LinkColor = Color.White; 
}
于 2011-03-22T09:12:31.317 回答
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;
}

希望这对你更好。

于 2011-03-22T09:15:27.743 回答