【问题标题】:TreeNode when Selected Change Foreground/Background Color选中时的 TreeNode 更改前景色/背景色
【发布时间】:2013-02-03 17:19:50
【问题描述】:

基本上我正在尝试找到一种方法来单击 TreeView 的区域并突出显示该区域。他们的问题似乎总是在选择另一个节点后不突出显示该区域。我一遍又一遍地玩弄和搜索.. 好吧.. 最后我问 b/c 我不能让它正常工作。我会展示我的代码,但它不仅仅是一堆令人讨厌的整合代码。有没有人有一个很好的工作例子?

仅澄清基础知识:

Private Sub TreeView1_AfterSelect(ByVal sender As Object, _
                                  ByVal e As TreeViewEventArgs) _
                                  Handles TreeView1.AfterSelect           
  'e.Node.BackColor = Color.Yellow 
End Sub

我尝试使用多种方法通过循环遍历集合来设置和取消选择。它似乎永远不会起作用!

【问题讨论】:

  • 请注意,我理解“点击区域”的含义。您是否只想单击一个节点并绘制自定义突出显示颜色?

标签: vb.net winforms treeview


【解决方案1】:

尝试将 TreeView 控件的 DrawMode 更改为 OwnerDrawText 并使用此绘图代码:

Private Sub TreeView1_DrawNode(ByVal sender As Object, _
                               ByVal e As DrawTreeNodeEventArgs) _
                               Handles TreeView1.DrawNode
  If (e.State And TreeNodeStates.Selected) <> 0 Then
    e.Graphics.FillRectangle(Brushes.Yellow, e.Bounds)
    TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds, _
                          Color.Black, Color.Empty, _
                          TextFormatFlags.VerticalCenter)
  Else
    e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds)
    TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds, _
                          SystemColors.WindowText, Color.Empty, _
                          TextFormatFlags.VerticalCenter)
  End If
End Sub

【讨论】:

  • 巧妙的技巧!我不知道绕过文本处理方式的属性设置。相反,我试图遍历充满 1000 个节点的集合来修改颜色。谢谢。
【解决方案2】:

第一步,放置一个文本框,一个标签和三个水平滚动条 step2-下一步是设置各个控件的属性。

  1. label1-caption-background
  2. text1-text-(留空)
  3. hscroll1-max-255
  4. hscroll2-max-255
  5. hscroll3-max-255

(上面给出的是控件、属性和设置) step3-这是最后一步。就是写代码。很简单。

Private Sub HScroll1_Change()(note:end of line1)
  Text1.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value)(note:end of line2)
End Sub


Private Sub HScroll2_Change()(note:end of line1)
  Text1.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value)(note:end of line2)
End Sub

Private Sub HScroll3_Change()(note:end of line1)
  Text1.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value)(note:end of line2)
End Sub

【讨论】:

  • 此代码仅适用于更改背景颜色。我想你没看懂代码。好吧,我再写一遍。
猜你喜欢
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 2011-04-27
  • 2012-01-15
相关资源
最近更新 更多