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

C# 在WebBrowser控件中的某个非活动鼠标时间后隐藏鼠标光标,c#,winforms,webbrowser-control,C#,Winforms,Webbrowser Control,我试图使鼠标光标在鼠标不移动的特定时间后消失。但是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

我试图使鼠标光标在鼠标不移动的特定时间后消失。但是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
事件。相反,您可以使用event of

然后应用用于显示和隐藏光标的逻辑。在计时器
勾选
事件检查中,如果上次移动在特定时间之前,请使用隐藏光标。同样在
MouseMove
中,使用方法显示光标

注意

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

    显示和隐藏方法调用必须平衡。每次打电话到 Hide方法必须有对Show方法的相应调用

  • 文档完成时订阅
    MouseMove
    ,因为
    document
    在完成
    DocumentCompleted
    事件之前将为空

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


非常感谢@RezaAghaei,但代码对我不起作用。。。光标保持显示状态…您可以简单地在干净的环境中安排测试。1) 创建一个
表单
。2) 在表单上放置一个
WebBrowser
。3) 在窗体上放置一个
计时器
,并将其
间隔
设置为
300
,将其
启用
设置为
true
4)将
加载
窗体事件附加到
加载
。5) 将
DocumentCompleted
web浏览器事件附加到
webBrowser1\u DocumentCompleted
6)将
Tick
计时器事件附加到
timer1\u Tick
。7) 运行程序并将鼠标移到web浏览器上,大约几秒钟内不要移动,然后再次移动并查看结果。好的!我的问题是没有启用计时器。再次非常感谢你。完美答案!雷扎,我刚刚意识到如果我专注于网络浏览器上的flash元素,光标会一直显示,你知道为什么吗?嗯,目前我对flash一无所知。也许flash active-x可以自己控制光标。如果你不能用flash解决这个问题,可以发布一个新的问题,其中包含复制步骤,其中包含一个URL来复制这个问题,我来看看:)
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;
    }
}