大佬教程收集整理的这篇文章主要介绍了TreeView vs. ListView MouseDown(长按)事件序列代码-执行-暂停差异,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是一个 Excel VBA 项目(因为有人编辑了标题),我需要澄清这篇文章的内容。
我正在编写通过 VBA 代码模块遍历/工作的代码,以列出用户窗体上的过程和控件,并列出过程如何/哪些过程相互调用。
我试图在 VBA 编辑器的设计器窗口中的用户窗体上在运行时模拟用户窗体控件的抖动,以通知用户使用鼠标选择了该特定控件在无模式用户窗体上的 ListVIEw/TreeVIEw 的 ListItem/Node 上。
用文字描述很复杂,所以我附上了一张GIF。
在 GIF 中,可以看到,在立即窗格中,执行 ListVIEw 中的 @H_703_7@mouseDown 和 ItemClick 事件后代码执行暂停,因为我没有释放按下的鼠标左键 (LMB) .因此,我将 jiggle 例程代码放在 ListVIEw 的 ItemClick 事件中。
然而,当我尝试用 TreeVIEw 做同样的事情时,我发现代码执行在 TreeVIEw 的 MouseDown 事件之后暂停,如果我没有释放 LMB,没有继续执行 NodeClick 事件,如它与 ListVIEw 一起使用,并且是 MouseDown 事件。
由于我将抖动代码放在 TreeVIEw NodeClick 事件处理程序中,但尚未发生,因此没有抖动效果。
但是在 LMB 释放后,控件的抖动效果非常直接,引人注目,因为代码执行在 MouseDown 事件结束时暂停后继续执行,不间断,直到 MouseUp 事件结束。
这一系列事件可以在立即窗口的输出中看到,如下面的 GIF 所示。
所以,情况就如上。
我试图将抖动代码放入 MouseDown 事件中。
但是,由于我需要 TreeVIEw 中的 SELEctedItem 来使我的 jiggle 代码正常工作,因此无论如何我都需要 NodeClick 事件。
我试图在 MouseDown 事件中检查 TreeVIEw 的 SELEctedItem/SELEcted-Node 但不幸的是,它只返回前一个 SELEctedItem/SELEcted-Node 而不是刚刚发生 MouseDown 事件的节点,这本身就有意义,因为 SELEctedItem 尚未设置为新节点,因为 NodeClick 事件尚未发生。
我认为,如果我可以在 MouseDown 事件时使用 HitTest 将节点置于鼠标下方,我就可以将该节点用作我的 jiggle 代码中的 SELEctedItem。
另一个障碍出现了,因为 TreeVIEw HitTest 函数使用 X,Y 作为单数,这似乎是 ?Twips 而不是像素,我可能需要使用幻数 = 88,90 和神奇的 TwipsPerPixel 函数并重新计算它以用于不同的显示器和分辨率。
所以,我寻找了不同的解决方案。
PS:作为一个缅甸人,我有责任让人们意识到缅甸目前正在发生一场反对残酷军事政变的革命,并恳请你们支持缅甸人民。谢谢。
我以定制的 HitTest 函数的形式找到了不同的解决方案,使用对 TreeView 的 Sendmessage API 调用,而不是使用 TreeView 的默认 HitTest 函数,可用 here。
那里的代码示例被允许自由使用,但不得在其版权免责声明中提到的任何网站上发布。
所以我想我不能在这里分享代码片段,但我相信分享该网站的链接是可以的。
我不得不稍微修改一下那里提到的代码,以返回节点,而不是返回其函数中返回的节点句柄。
我使用该函数是因为它使用像素作为 X、Y 坐标,而不是 VBA 使用的 ?Twips。
如果谷歌足够努力,也可以在其他地方找到 ListViews 的类似功能。
因此,它就像一个魅力,控件现在在 MouseDown 事件内摇晃,而不使用 NodeClick 事件。
我写了这个问题+答案帖子,以帮助 VBA 程序员解决 ItemClick 与 NodeClick 事件序列差异的问题,并让他们知道那里有更好的 HitTest 例程,无需转换鼠标即可使用以像素为单位的坐标。
整个 VBA 项目是我的 VBA 项目信息工具(带有代码混淆器和可视化代码流工具)的一部分,在 GitHub 上提供了基本的 Alpha RC 版本。
备注: 我一生都无法在任何地方找到 ListViews 和 TreeViews 的 MouseClick 事件序列的官方描述。因此,不得不求助于 debug.print "1.TV_MouseDown"
的东西。
PS:身为缅甸人,我恳请大家支持缅甸春季革命。
缅甸革命万岁!!!
以上是大佬教程为你收集整理的TreeView vs. ListView MouseDown(长按)事件序列代码-执行-暂停差异全部内容,希望文章能够帮你解决TreeView vs. ListView MouseDown(长按)事件序列代码-执行-暂停差异所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。