一直在试图找出导致我的气球尺寸发生变化的原因以及其中的文字被裁剪的结果。我认为这与重新设置控件的提示文本有关。不。事实证明这是取消popOpen。一旦取消,它将对下一个要打开的气球产生不利影响。
任何人都有一些关于解决方案的好主意吗?
这是代码:(重现错误,运行它和mouseOver l3,然后是l2,然后是l,然后是l3 - 按此顺序)。
public partial class Form7 : Form
{
private Label l, l2, l3;
public Form7()
{
InitializeComponent();
toolTip1.IsBalloon = true;
toolTip1.Popup += new PopupEventHandler(toolTip1_Popup);
l = new Label();
l.Name="l";
l.Text = "Label 1";
l.Top = 100;
l.Left = 100;
l2 = new Label();
l2.Name="l2";
l2.Text = "Label 2";
l2.Top = 150;
l2.Left = 100;
l3 = new Label();
l3.Name = "l3";
l3.Text = "Label 3";
l3.Top = 200;
l3.Left = 100;
this.Controls.Add(l);
this.Controls.Add(l2);
this.Controls.Add(l3);
toolTip1.SetToolTip(l, "Hello.");
toolTip1.SetToolTip(l2, "This is longer.");
toolTip1.SetToolTip(l3, "This is even longer than Label 2.");
}
void toolTip1_Popup(object sender, PopupEventArgs e)
{
Control c = e.AssociatedControl;
if (c.Name == "l")
e.Cancel = true; // <--- This is the culprit!
else
e.ToolTipSize = new Size(400, 100); // <--- This sems to have no effect when isBalloon == true.
}
}
答案 0 :(得分:1)
叹息,那些恼人的ToolTip漏洞。至少部分原因似乎是本机Windows控件实际上不支持取消弹出窗口。 Winforms通过将工具提示窗口大小设置为0 x 0像素来模拟它。这似乎影响下一个弹出窗口的结果,它似乎生成一个窗口大小,该大小是从0 x 0大小计算出来的,并假定文本应该被包装。但实际上并没有包装文本。
解决问题的方法是在取消后敲击本机控件,使其无法记住大小。这很有效:
if (c.Name == "l") {
e.Cancel = true;
this.BeginInvoke(new Action(() => {
toolTip1.IsBalloon = !toolTip1.IsBalloon;
toolTip1.IsBalloon = !toolTip1.IsBalloon;
}));
}