0

数秒待ってラベル値を消去するメソッドを書いています。ただし、ユーザーがラベルにマウスを置いている場合は、クリーニングできません。

コード:

public static void CleanIn(this Label label, int miliseconds)
        {
            Timer timer = new Timer();
            timer.Interval = miliseconds;
            timer.Tick += (o, e) =>
            {

                if (!label.Focused)
                {
                    label.ResetText();
                    timer.Stop();
                    timer.Dispose();
                }
            };
            timer.Start();
        }

問題は、マウスがラベル上にある場合、値が独立して消去されることです。これを修正する方法は?

4

2 に答える 2

0

このFocusedプロパティは、マウスがコントロール上に配置されているかどうかではなく、ユーザーがコントロールにタブで移動したかどうかに関係します。MousePosition次のように、プロパティをメソッドと組み合わせて使用​​してPointToClient、マウスがコントロール上にあるかどうかを判断できます。

...
Point cursor = label.PointToClient(Control.MousePosition);
if (!(cursor.X >= 0 && cursor.X <= label.Width
        && cursor.Y >= 0 && cursor.Y <= label.Height))
{
    ...
于 2012-06-01T18:53:02.787 に答える
0

Labelフォーカス (*) を持つことはできません。マウス オーバー イベントに応答し、ユーザーがホバリングしているかどうかを手動で追跡し、その上でロジックを実行します。

*技術的には正しくないここを参照

于 2012-06-01T18:46:24.967 に答える