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

Label永远不能有焦点(*)。响应鼠标悬停事件并手动跟踪用户是否悬停并对其进行逻辑处理。

*技术上不正确,请参见此处

于 2012-06-01T18:46:24.967 回答
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 回答