在 WebBrowser 控件中的某些非活动鼠标时间后隐藏鼠标光标
Hide mouse cursor after certain inactive mouse time in a 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;
}
}
}
WebBrowserControl
不支持 MouseMove
事件。相反,您可以使用 MouseMove
event of WebBrowser.Document.Body
。
然后应用您用于显示和隐藏光标的逻辑。在计时器 Tick
事件中检查最后一次移动是否在特定时间之前,使用 Cursor.Hide
. Also in MouseMove
show the cursor using 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
的工作是在Show
和Hide
之间保持平衡,因为如文档中所述:
The Show and Hide method calls must be balanced. For every call to the
Hide method there must be a corresponding call to the Show method.
在文档完成时订阅 MouseMove
,因为 Document
在完成 DocumentCompleted
事件引发之前将为空。
我检查了如果 lastMovement
没有值然后没有隐藏光标,以防止在用户将鼠标移到控件上之前在启动时隐藏光标。
我试图让鼠标光标在鼠标不动一段时间后消失。 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;
}
}
}
WebBrowserControl
不支持 MouseMove
事件。相反,您可以使用 MouseMove
event of WebBrowser.Document.Body
。
然后应用您用于显示和隐藏光标的逻辑。在计时器 Tick
事件中检查最后一次移动是否在特定时间之前,使用 Cursor.Hide
. Also in MouseMove
show the cursor using 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
的工作是在Show
和Hide
之间保持平衡,因为如文档中所述:The Show and Hide method calls must be balanced. For every call to the Hide method there must be a corresponding call to the Show method.
在文档完成时订阅
MouseMove
,因为Document
在完成DocumentCompleted
事件引发之前将为空。我检查了如果
lastMovement
没有值然后没有隐藏光标,以防止在用户将鼠标移到控件上之前在启动时隐藏光标。