4

PictureBoxマップが割り当てられた があります (基本的にはオブジェクトのリスト) Rectangle。ユーザーがこのピクチャボックスの上にマウスを移動すると、そのようにしたいと思います。マウスがリストに存在する長方形の上にある場合、ツールチップがポップアップしていくつかの情報を表示します。

マッピングは正常に機能しますが、問題はToolTipおかしくなり、適切に表示されないことです。マウスを動かしてもポップアップし続けます。マウスが長方形の中にあるときにのみポップアップするようにコーディングするにはどうすればよいですか?

これは私のコードで、その下に例があります!

private void pictureBoxPackageView_MouseMove(object sender, MouseEventArgs e)
{
    if (PackageMap == null || PackageMap.Count == 0) return;
    var point = new Point(e.X, e.Y);

    foreach (var map in PackageMap)
    {
        if (map.Rectangle.Contains(point))
        {
            var tip = new ToolTip();
            tip.ToolTipTitle = map.Pin.Group;
            tip.Show("Result: " + map.Pin.Mk2Result, pictureBoxPackageView, point, 200);
            break;
        }
    }
}

ここに画像の説明を入力

4

2 に答える 2

3

カーソルが長方形の内側にあるかどうかのみを確認しているため、ポップアップが継続的に表示されます。マウスを数回動かすことはできますが、まだその長方形内にいることに注意してください。

あなたが望むのは、長方形に入ったときに一度だけツールチップをポップアップすることだと思います。マウスの以前の位置を覚えておく必要があります。現在の場所が四角形内にある場合、前の場所が同じ四角形内にないかどうかを確認します。これは、ツールチップを表示する時間です。それ以外の場合はパスします。

于 2012-08-16T09:28:17.393 に答える
3

カスタム リスナーを追加して、個別のツールチップを表示する個別の長方形のコンテナーごとにMouseEnterイベントとMouseLeaveイベントを検出し、MouseEnter で X 秒間ツールチップを表示するコードを追加します ( Show()メソッドを使用して表示します)。 . ユーザーがカーソルを四角形内に保持すると、カーソルは X 秒間表示され続けます ( AutoPopDelayプロパティを使用して、X 秒後に自動的に非表示にします)。ユーザーがカーソルを外に移動した場合、MouseLeave イベントはHide()メソッドを使用する必要があります。

また、一度に複数の領域にカーソルを移動したときに複数のツールチップが開かないように、1 秒の遅延を設定します。これにはInitialDelayプロパティを使用します。

次のようになります (プロパティが適切に設定されていません)。

private void area1_MouseEnter(object sender, EventArgs e)
{
    tooltip.Show("text to display", window);
}

private void area1_MouseLeave(object sender, EventArgs e)
{
    tooltip.Hide(window);
}

私が行くルートは、使用しているコンテナーを拡張し、これらのリスナーをカスタム コンテナー クラスに追加することです。特に、すべてがこの機能を必要とするいくつかの同様のコンテナーを作成している場合はそうです。

于 2012-08-16T10:13:36.780 に答える