ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何正确使用TreeView的HitTest方法?

如何正确使用TreeView的HitTest方法?

作者:绿色风 分类: 时间:2022-08-17 浏览:81
楼主
amulee
Q:如何正确使用TreeView的HitTest方法?
A:在TreeView控件中有一个非常有用的方法HitTest,其功能是返回指定坐标的节点对象。其语法如下:
  1. object.HitTest(x As Single, y As Single)

其中x和y代表坐标点,但必须要注意的是这里的x和y表示的是单位缇。任何数值必须转换为相应的缇才能正确得到HitTest的返回结果。

参考以下示例。本例中利用MouseMove事件和HitTest方法,返回当前鼠标所指向的节点的显示文本。代码如下:
  1. Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
  2. Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nindex As Long) As Long
  3. Private PixX2TwipX As Double '像素转换成缇
  4. Private PixX2TwipY As Double
  5. Private Const LOGPIXELSX = 88
  6. Private Const LOGPIXELSY = 90
  7. Private Sub TreeView1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
  8.     If Not TreeView1.HitTest(x * PixX2TwipX, y * PixX2TwipY) Is Nothing Then Label1.Caption = TreeView1.HitTest(x * PixX2TwipX, y * PixX2TwipY).Text
  9. End Sub
  10. ''初始化窗体
  11. Private Sub UserForm_Initialize()
  12.     Dim Dep1 As Node
  13.     Dim Dep2 As Node
  14.     Dim i As Long
  15.     Dim Arr
  16.     On Error Resume Next
  17.     Arr = Range("A2:C" & Range("A65536").End(xlUp).Row)
  18.     With TreeView1
  19.         For i = 1 To UBound(Arr)
  20.             Set Dep1 = .Nodes(Arr(i, 2))
  21.             If Err.Number <> 0 Then
  22.                 Err.Clear
  23.                 Set Dep1 = .Nodes.Add(Key:=Arr(i, 2), Text:=Arr(i, 2))
  24.             End If
  25.             Set Dep2 = .Nodes(Arr(i, 3))
  26.             If Err.Number <> 0 Then
  27.                 Err.Clear
  28.                 Set Dep2 = .Nodes.Add(relative:=Dep1, relationship:=tvwChild, Key:=Arr(i, 3), Text:=Arr(i, 3))
  29.             End If
  30.             .Nodes.Add relative:=Dep2, relationship:=tvwChild, Key:=i & Arr(i, 1), Text:=Arr(i, 1)
  31.         Next
  32.         Set Dep1 = .Nodes("人事")
  33.     End With
  34.     PixX2TwipX = Application.InchesToPoints(1) * 20 / GetDeviceCaps(GetDC(0), LOGPIXELSX)
  35.     PixX2TwipY = Application.InchesToPoints(1) * 20 / GetDeviceCaps(GetDC(0), LOGPIXELSY)
  36. End Sub




TreeView的HitTest.rar
2楼
篮板球
VBA很值得学习。
3楼
liucq
学习        
4楼
hwc2ycy
在对象里看到这个方法,以为是X,Y只是简单的数值,没想到还要经过这么一番转变。学习了。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap