NAS*_*SER 0 c# tooltip winforms
如何为我较长的控制文本设置就地工具提示,如:

我已经使用ToolTip.Show方法使用这种类型的工具提示
ToolTip ttpInplace = new ToolTip();
ttpInplace.Show(textbox1.Text, textbox1, 0, 0, 4000);
private void FormToolPopup_MouseEnter(object sender, EventArgs e)
{
if (ttpCustomToolTip != null)
{
ttpCustomToolTip.Hide(textBox1);
}
}
private void textBox1_MouseEnter(object sender, EventArgs e)
{
Size s = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);
if (s.Width > textBox1.Width)
{
ttpCustomToolTip.Show(textBox1.Text, textBox1, -4, 0);//, 5000);
}
}
Run Code Online (Sandbox Code Playgroud)
但它闪烁着.我已经阅读了http://msdn.microsoft.com/en-us/library/windows/desktop/hh298402(v=vs.85).aspx上的文章, 但我有问题要实现,因为它是在C++中.任何人都可以帮助我吗?
是的,它会闪烁,因为您在与鼠标相同的位置显示工具提示.因此工具提示会立即获得鼠标移动消息.这使得提示消失了.这导致MouseEnter事件再次触发.Etcetera,flickorama.
一种解决方法是捕获鼠标,使其无法向工具提示发送消息:
textBox1.Capture = true;
ttpCustomToolTip.Show(textBox1.Text, textBox1, -4, 0);//, 5000);
Run Code Online (Sandbox Code Playgroud)
当用户单击鼠标时,捕获将自动取消.可能足够好,你可能不得不把它设置回假.要看.最好的办法是实现MouseMove事件,并在看到它移动到控件之外时取消工具提示和捕获.您还必须做一些事情来使文本框可用,您的工具提示阻止访问.至少有一个原因,你不经常看到这个使用.如果不打算编辑,请务必使用标签.请注意其AutoEllipsis属性.