0

バルーンのサイズが変更され、その結果、バルーン内のテキストがトリミングされる原因を突き止めようとしています。コントロールのヒントテキストを再設定する必要があると思いました。いいえ。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.
    }

}
4

1 に答える 1

1

ため息、それらの厄介なツールチップのバグ。理由の少なくとも一部は、ネイティブ 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;
       }));
   }
于 2012-10-14T16:57:21.943 に答える