Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以为.NET Windows窗体窗口中的工具提示设置无限自动复制延迟吗?_C#_.net_Winforms_Tooltip - Fatal编程技术网

C# 我可以为.NET Windows窗体窗口中的工具提示设置无限自动复制延迟吗?

C# 我可以为.NET Windows窗体窗口中的工具提示设置无限自动复制延迟吗?,c#,.net,winforms,tooltip,C#,.net,Winforms,Tooltip,我要求标准的.NET工具提示不自动隐藏-也就是说,我需要它们保持可见,直到鼠标离开具有工具提示的控件。我希望避免对所有控件使用特定的MouseEnter和MouseLeave事件以及工具提示。我很高兴听到第三方解决方案能够解决问题。将ToolTipService.ShowDuration附加属性设置为int.MaxValue: <Button Height="23" Width="75" Content="Click Me" ToolTip="My ToolTip" Too

我要求标准的.NET工具提示不自动隐藏-也就是说,我需要它们保持可见,直到鼠标离开具有工具提示的控件。我希望避免对所有控件使用特定的MouseEnter和MouseLeave事件以及工具提示。我很高兴听到第三方解决方案能够解决问题。

将ToolTipService.ShowDuration附加属性设置为int.MaxValue:

<Button 
  Height="23" Width="75"
  Content="Click Me" 
  ToolTip="My ToolTip" ToolTipService.ShowDuration="2147483647" 
/>

工具提示.StopTimer方法可能会有所帮助。从MSDN:

ToolTip类有一个内部计时器,用于设置工具提示的显示持续时间。与此计时器关联的持续时间通过AutoOpDelay属性设置StopTimer方法将停止此内部计时器,导致任何显示的工具提示以模式显示,直到调用Hide方法,或父窗体最小化、隐藏或关闭


这不是你想听的答案。。。你自己滚吧。我曾经有过这样一个场景,我想模拟新Office的ribbonbar工具提示行为来执行快捷键盘命令,但我发现标准工具提示API太有限了


为每个需要工具提示的控件创建一个小的、简单的、无边框的表单实例。然后以非模态方式显示和隐藏它们,就像您执行鼠标进入或离开事件一样。让此窗口的构造函数接收UI控件实例,并让它查询控件的事件,这样它就可以将自己附加到鼠标输入和离开事件,这样您就不必手动将它们连接起来。

因此,我最终取消激活工具提示,但我仍然使用它来保存工具提示的文本,因为它巧妙地将自己添加到所有控件中。我为工具提示制作了自己的面板和标签,并动态定位、显示和填充所有控件的鼠标输入和鼠标离开事件上的文本

我还编写了一个递归函数,将鼠标事件添加到每个标签控件(我唯一打开工具提示的控件),因此我不必手动添加,也不必在添加新标签时记得这样做。项目的新开发人员可能永远不会意识到工具提示控件实际上并没有呈现提示

为什么要在面板中添加标签?-因此,真正大的工具提示可以滚动-尽管这仍然不能很好地工作

这不是真正的漂亮,我仍然在寻找一个好的答案,如果你有(或批评我所采用的方法)


我遇到过,但他们的工具提示似乎没有在我的.NET3.5应用程序中正确呈现。我还在和他们说话。

试试
myToolTip.ReshowDelay=0


您只需在延迟过期后立即重新显示工具提示。这对我很有效。

我正在寻找解决这个问题的办法

  • 弹出式阳台消失得太快,不允许我阅读其内容
  • 悬停在该区域时,弹出式阳台不会再次出现
  • 我在论坛中找到了以下答案,它不能解决问题2,但让我在将文本值设置为32766时阅读文本的时间超过了我需要的时间,因此,在我看来,这是一种“变通方法”:

    事实上,我发现我的问题是我分配了一个大于32767的值(32768和更高的值将产生5秒的效果) 奇怪,因为AutoOpDelay应该以整数(32位)作为 参数,32767实际上是一个有符号的16位

    但我必须承认,这仍然很糟糕


    但将其设置为32000(32秒)似乎效果更好。不知道这是为什么,但可能对某人有帮助。

    我认为你是在试图治愈症状,而不是问题的原因

    您试图强制工具提示与工具提示不同。根据定义,工具提示是“一个小的“悬停框”,其中包含有关悬停项目的信息”


    如果用户无法在30秒内阅读工具提示试图建议的内容,那么它实际上不是一个“提示”,而是帮助文件中的一整章。将冗长的说明放入手册中,不要试图将其强制放入永远打开的工具提示中。

    根据我有限的经验,我发现将showAlways属性设置为true会产生副作用,使提示显示“无限”(直到光标退出控件)。这不是文档所说的,而是我所经历的。(但是,我正在使用Janus Supertip组件,这可能会影响行为)。

    在我的应用程序中,工具提示文本必须每10秒更新一次。对我来说,每次更新此文本时都要停用并激活工具提示。当我将AutoOpDelay设置为10秒以上时,工具提示将永久保留。因此,您可以使用计时器反复激活和停用工具提示:

    private void timer1_Tick(object sender, EventArgs e)
    {
        toolTip1.Active = false;
        toolTip1.Active = true;
    }
    
    要最小化重新激活工具提示时发生的闪烁,请将InitialDelay设置为1。当您将AutoOpDelay设置为30000且计时器间隔也设置为30000时,您将看到非常短的闪烁,每30秒仅闪烁一次。对于我的应用程序,这种短闪烁是可以接受的。顺便说一句,别忘了打开计时器!(起初我以为它不起作用,直到我发现我忘了打开计时器;-)


    当然,这是症状的解决方法,而不是问题的优雅解决方案。

    因为它已经发布了无数次,并且在早期的.NET Framework中就知道了,所以不能将AutoOpDelay时间设置为高于Int16.MaxValue(即32767)并使其工作。使用tooltip Show()方法会得到相同的结果。任何高于32767的值都会导致计时器重置为5000ms

    即使尝试将AutomaticDelay设置为导致AutoOpDelay值高于32767的值,也会导致工具提示无法显示