我正在尝试在自定义绘制(使用 GDI+)的(WinForms)UserControl 上使用 WinForms Tooltip 类。这是遗留代码,但我需要再维护几年。我希望在光标在各个位置暂停时显示工具提示。我不想通过计算知道是否应该在光标暂停之前显示工具提示,这有助于确定 Popup 事件中的信息。在下面的非工作示例代码中,我希望我可以将光标移动到表单上的任何角落并查看工具提示。似乎如果我单击以删除工具提示,我就再也看不到了。显示的第一个工具提示并不像我预期的那样直接。我该如何进行这项工作?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TestToolTip
{
public partial class Form1 : Form
{
private readonly ToolTip _tooltip = new ToolTip();
public Form1()
{
InitializeComponent();
_tooltip.AutoPopDelay = 10000;
_tooltip.InitialDelay = 1000;
_tooltip.ReshowDelay = 200;
_tooltip.Popup += OnTooltipPopup;
_tooltip.SetToolTip(this, "you should never see this"); // we need something or it won't ever trigger Popup
}
private Point _lp;
protected override void OnMouseMove(MouseEventArgs e)
{
_lp = e.Location;
base.OnMouseMove(e);
}
void OnTooltipPopup(object sender, PopupEventArgs e)
{
string text = null;
if (_lp.X < 100 && _lp.Y < 100)
text = "Top Left";
else if (_lp.X < 100 && _lp.Y > Height - 100)
text = "Bottom Left";
else if (_lp.X > Width - 100 && _lp.Y < 100)
text = "Top Right";
else if (_lp.X > Width - 100 && _lp.Y > Height - 100)
text = "Bottom Right";
var existing = _tooltip.GetToolTip(this);
if (existing == text)
return;
if (text != null)
_tooltip.SetToolTip(this, text); // calls into this method
e.Cancel = true;
}
}
}