我试图让鼠标光标在鼠标不移动一段时间后消失。 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;
}
}
}
答案 0 :(得分:2)
WebBrowserControl
不支持MouseMove
事件。相反,您可以使用MouseMove
的WebBrowser.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
的工作是在Show
和Hide
之间保持平衡,因为正如文档中所述:
必须平衡Show和Hide方法调用。每次打电话给 隐藏方法必须对Show方法进行相应的调用。
文档完成后订阅MouseMove
,因为Document
在完成DocumentCompleted
事件加注前为空。
我检查了lastMovement
是否没有值,然后没有隐藏光标,以防止在用户将鼠标移到控件上之前隐藏光标。