如何重写treeview控件

wen000_ 2015-06-15 01:48:54
当treeview控件的节点被选中时为蓝底白字,当treeview失去焦点时该节点时为灰底黑字,我想将该灰色改为别的颜色,而且此颜色又不是treeview的属性。请问该如何重写treeview控件呢?
...全文
408 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylike 2015-07-13
  • 打赏
  • 举报
回复
引用DSAPI1.0.0.7 然后加一句代码: DSAPI.Win7特性.使控件应用Win7资源管理器风格(Form1)
devmiao 2015-06-28
  • 打赏
  • 举报
回复
你需要的是重载onpaint
Lyhokia 2015-06-28
  • 打赏
  • 举报
回复
继承一个可好?新建一个类名为MyTreeView.vb,复制过去,生成项目,然后就可以在工具箱里找到“MyTreeView”了 p.s.checkbox的图像如果要改的话 建议设置treenode的image,并取消掉CheckBoxes

Public Class MyTreeView
    Inherits TreeView
    Protected Overrides Sub OnCreateControl()
        CheckBoxes = True
        MyBase.OnCreateControl()
    End Sub
    Protected Overrides Sub OnLostFocus(e As EventArgs)
        SelectedNode.BackColor = Color.Gray
        MyBase.OnLostFocus(e)
    End Sub
    Protected Overrides Sub OnGotFocus(e As EventArgs)
        SelectedNode.BackColor = Color.Transparent
        MyBase.OnGotFocus(e)
    End Sub
    Protected Overrides Sub OnNodeMouseClick(e As TreeNodeMouseClickEventArgs)
        For Each i As TreeNode In Me.Nodes
            If i IsNot SelectedNode Then
                i.BackColor = Color.Transparent
            End If
        Next
        MyBase.OnNodeMouseClick(e)
    End Sub
End Class
rmini 2015-06-23
  • 打赏
  • 举报
回复
我重写也是一个弱点,表示关注
皮特胖胖 2015-06-15
  • 打赏
  • 举报
回复
引用 5 楼 wen000_ 的回复:
[quote=引用 4 楼 hironpan 的回复:] 如果想重写TreeView,跟上面代码类似,重写LostFocus、AfterSelect事件就可以了 可以不重写还是不要重写吧,多一事不如少一事。。。
别怪我固执,.net自带的控件类真的有很多地方无法满足要求。 请教大神怎么样利用msdn学习重写控件呢,具体在什么地方?摸索MSDN很长时间了,但发现也只是冰山一角[/quote] 其实我也只会皮毛,多看书看博客,有问题可以搜索搜索。。
wen000_ 2015-06-15
  • 打赏
  • 举报
回复
引用 4 楼 hironpan 的回复:
如果想重写TreeView,跟上面代码类似,重写LostFocus、AfterSelect事件就可以了 可以不重写还是不要重写吧,多一事不如少一事。。。
别怪我固执,.net自带的控件类真的有很多地方无法满足要求。 请教大神怎么样利用msdn学习重写控件呢,具体在什么地方?摸索MSDN很长时间了,但发现也只是冰山一角
皮特胖胖 2015-06-15
  • 打赏
  • 举报
回复
如果想重写TreeView,跟上面代码类似,重写LostFocus、AfterSelect事件就可以了 可以不重写还是不要重写吧,多一事不如少一事。。。
皮特胖胖 2015-06-15
  • 打赏
  • 举报
回复
HideSelection 属性设置为True,以下代码作参考,要改前景色也一样。。

Public Class Form1
    ''' <summary>
    ''' 上一次选择的节点对象。
    ''' </summary>
    Private OldSelectedNode As TreeNode

    Private Sub TreeView2_LostFocus(sender As Object, e As EventArgs) Handles TreeView2.LostFocus
        If Not OldSelectedNode Is Nothing Then
            OldSelectedNode.BackColor = Color.Tomato  '自定义颜色
        End If
    End Sub

    Private Sub TreeView2_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView2.AfterSelect
        ' 选中新节点后,之前的节点重置为背景色
        If Not OldSelectedNode Is Nothing Then
            OldSelectedNode.BackColor = TreeView2.BackColor
        End If
        ' 更新节点变量
        OldSelectedNode = e.Node
    End Sub
End Class
wen000_ 2015-06-15
  • 打赏
  • 举报
回复
引用 1 楼 hironpan 的回复:
没必要重写啊,这些都有自带属性的吧。。
TreeView 的 BackColor 就是设置它的背景色,如图第二个已经设置背景为番茄红,节点的颜色也是可以自己设置的,BackColor和ForeColor属性。


大神我的意思是这样的:

新建时是白底黑字,如果选中则是蓝底白字,当鼠标点treeview外的其它位置时则是灰底黑字
皮特胖胖 2015-06-15
  • 打赏
  • 举报
回复
没必要重写啊,这些都有自带属性的吧。。
TreeView 的 BackColor 就是设置它的背景色,如图第二个已经设置背景为番茄红,节点的颜色也是可以自己设置的,BackColor和ForeColor属性。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧