Sin*_*atr 5 c# tooltip winforms
ToolTip.Show当包含控件的窗口处于非活动状态时,为什么不显示手动显示的工具提示?
public class MyControl : Button
{
private _tip;
public string ToolTip
{
get { return _tip; }
set { _tip = value; }
}
private ToolTip _toolTip = new ToolTip();
public MyControl()
{
_toolTip.UseAnimation = false;
_toolTip.UseFading = false;
_toolTip.ShowAlways = true;
}
protected override void OnMouseHover(EventArgs e)
{
_toolTip.Show(_tip, this, 0, Height);
base.OnMouseHover(e);
}
protected override void OnMouseLeave(EventArgs e)
{
_toolTip.Hide(this);
base.OnMouseLeave(e);
}
}
Run Code Online (Sandbox Code Playgroud)
我去了,ToolTip.Show因为我必须在屏幕上有无限时间的工具提示,这是正常情况下无法实现的ToolTip.我也喜欢将工具提示文本作为控件本身的一部分.但不幸的是,当这种方式为非活动窗口显示工具提示时(尽管如此ShowAlways = true),它根本不起作用.
该OnMouseHower事件是惜售,但_toolTip.Show什么都不做.除非窗口被激活,然后一切正常.
为解决方案添加赏金以显示非活动表单的工具提示(当工具提示文本是控件属性时,最好使用解决方案,而不是IContainer).
有一个私有方法可以执行您想要的操作,因此要访问它,您必须使用反射来调用它:
using System.Reflection;
public class MyControl : Button {
private ToolTip toolTip = new ToolTip() {
UseAnimation = false,
UseFading = false
};
public string ToolTip { get; set; }
protected override void OnMouseHover(EventArgs e) {
base.OnMouseHover(e);
Point mouse = MousePosition;
mouse.Offset(10, 10);
MethodInfo m = toolTip.GetType().GetMethod("SetTool",
BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(toolTip, new object[] { this, this.ToolTip, 2, mouse });
}
protected override void OnMouseLeave(EventArgs e) {
base.OnMouseLeave(e);
toolTip.Hide(this);
}
}
Run Code Online (Sandbox Code Playgroud)
提示将显示在非活动窗口上,它将无限期地保留在屏幕上,直到鼠标离开控件.
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |