在WebBrowser控件中的某些非活动鼠标时间后隐藏鼠标光标

时间:2016-09-06 16:07:04

标签: c# winforms webbrowser-control

我试图让鼠标光标在鼠标不移动一段时间后消失。 There's already a question on this但WebBrowser控件表单没有鼠标事件。我有上面链接的问题中提到的代码:

public partial class Form1 : Form
{
public TimeSpan TimeoutToHide { get; private set; }
public DateTime LastMouseMove { get; private set; }
public bool IsHidden { get; private set; }

public Form1()
{
    InitializeComponent();
    TimeoutToHide = TimeSpan.FromSeconds(5);
    this.MouseMove += new MouseEventHandler(Form1_MouseMove);
}

void Form1_MouseMove(object sender, MouseEventArgs e)
{
    LastMouseMove = DateTime.Now;

    if (IsHidden) 
    { 
        Cursor.Show(); 
        IsHidden = false; 
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    TimeSpan elaped = DateTime.Now - LastMouseMove;
    if (elaped >= TimeoutToHide && !IsHidden)
    {
        Cursor.Hide();
        IsHidden = true;
    }
  }
}

1 个答案:

答案 0 :(得分:2)

WebBrowserControl不支持MouseMove事件。相反,您可以使用MouseMoveWebBrowser.Document.Body事件。

然后应用您用于显示和隐藏光标的逻辑。在计时器Tick事件中,检查最后一次移动是否在特定时间之前,使用Cursor.Hide隐藏光标。同样在MouseMove中使用Cursor.Show方法显示光标。

DateTime? lastMovement;
bool hidden = false;
void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.Navigate("http://www.google.com");
}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    webBrowser1.Document.MouseMove += Document_MouseMove;
}
void Document_MouseMove(object sender, HtmlElementEventArgs e)
{
    lastMovement = DateTime.Now;
    if (hidden)
    {
        Cursor.Show();
        hidden = false;
    }
}
private void timer1_Tick(object sender, EventArgs e)
{
    if (!lastMovement.HasValue)
        return;
    TimeSpan elaped = DateTime.Now - lastMovement.Value;
    if (elaped >= TimeSpan.FromSeconds(2) && !hidden)
    {
        Cursor.Hide();
        hidden = true;
    }
}

注意

  • bool hidden的工作是在ShowHide之间保持平衡,因为正如文档中所述:

      

    必须平衡Show和Hide方法调用。每次打电话给   隐藏方法必须对Show方法进行相应的调用。

  • 文档完成后订阅MouseMove,因为Document在完成DocumentCompleted事件加注前为空。

  • 我检查了lastMovement是否没有值,然后没有隐藏光标,以防止在用户将鼠标移到控件上之前隐藏光标。