我有一个带有分层柔性网格属性集的ToolTipText控件,当我从源代码运行时,工具提示会显示它应该显示的内容。但是,当我编译并以这种方式运行时,工具提示就不会显示。
我试图删除任何侦听MouseMove的内容,希望能够修复它,当我添加一些代码将工具提示文本放入消息框中时,它似乎被正确设置。有人能想到为什么会发生这种事吗?
更新:当我将网格驻留在另一个用户控件中时,问题就出现了。例如:生成container.ctl,它只是一个空白控件,但使用的是ControlContainer = True。然后制作gridholder.ctl,它是container.ctl内部的mshfg。最后,将gridholder.ctl嵌入到某种形式中。柔性网格上的工具提示似乎不会出现。
我很想看看这有多好.
发布于 2012-03-13 04:38:18
我还没有找到解决这个问题的方法,但是我更清楚为什么在经过一些测试之后,WinDBG中的一些WinDBG运行时代码就会发生。
第一件有趣的事情是,VB6不使用Windows提供的标准工具提示显示机制。例如,它不使用WM_NOTIFY消息来显示/隐藏工具提示,也不使用说明工具提示如何在Windows中工作的文档中描述的任何其他“标准”工具提示支持。
相反,VB6运行时有自己的管理和显示工具提示的方法。原则上,它在某些方面类似于标准Windows处理工具提示的方式,但在很多方面也有所不同。
VB6如何使用工具提示的详细信息:
MSHFlexGrid的问题(我想象其他不是标准VB6控件的控件)的问题是,当您悬停在控件上并且它在自定义容器中时,这段代码不会检索正确的HCTL。
在这种情况下,代码检索自定义容器的HCTL,而不是MSHFlexGrid本身的HCTL。因此,它检索容器的ToolTipText属性(它是空的),而不是网格的ToolTipText,因此不会显示工具提示。
我不清楚为什么会这样做,因为正如在关于您的问题的注释中所指出的,如果您使用PictureBox作为容器,所有这些操作都是正确的。
我怀疑PictureBox有正确处理此问题的代码,这在您创建自己的容器时不包括在内。
如果我能找到答案的话,我会用一个实际的解决方法更新这个答案。我现在唯一能想到的就是以某种方式“同步”容器的ToolTipText属性和网格的ToolTipText属性,这样当VB6请求容器的ToolTipText属性时,它将返回网格的ToolTextTip属性的值。
但是,说起来容易做起来难,因为ToolTipText是一个扩展程序属性,并且扩展程序属性优先于您自己编写的具有相同名称的属性。
发布于 2012-03-02 02:31:12
经过一番研究,我发现了我认为的根本问题。您的用户控件没有实现要与其交互的任何方法。作为容器控件的用户控件需要实现Extender功能。这两个链接是迄今为止我在这个问题上找到的最好的链接。
http://www.justvb.net/obook/ch7.htm#UsingtheExtenderObject
http://msdn.microsoft.com/en-us/library/aa733622(v=vs.60).aspx
https://stackoverflow.com/questions/9507847
复制相似问题