在 winforms 中使用控件(链接标签、树视图)

Posted

技术标签:

【中文标题】在 winforms 中使用控件(链接标签、树视图)【英文标题】:working with controls(linklabels, treeview) in winforms 【发布时间】:2011-03-22 09:07:18 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

您的面板包含所有控件 - 其中一个是 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; 

【讨论】:

【参考方案3】:

您收到错误是因为您尝试将 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;

希望这对你更好。

【讨论】:

以上是关于在 winforms 中使用控件(链接标签、树视图)的主要内容,如果未能解决你的问题,请参考以下文章

C# - 查找树视图控件的特定节点或子节点

Winform 控件

Winform中TreeView的常用属性和方法?

自定义 WinForms ErrorProvider 以在控件条目中显示其图标

怎么给treeview接点增加自定义属性

C# winform treeview 节点展开状态的图标设置