【问题标题】:Hide mouse cursor after certain inactive mouse time in a WebBrowser Control在 WebBrowser 控件中的某些非活动鼠标时间后隐藏鼠标光标
【发布时间】:2016-09-06 16:07:03
【问题描述】:

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

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;
    }
  }
}

【问题讨论】:

    标签: c# winforms webbrowser-control


    【解决方案1】:

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

    然后应用您用于显示和隐藏光标的逻辑。在计时器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,因为在完成DocumentCompleted 事件引发之前Document 将为空。

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

    【讨论】:

    • 非常感谢@RezaAghaei,但代码对我不起作用...光标保持显示...
    • 您可以在干净的环境中简单地安排测试。 1) 创建一个Form2) 在表单上输入WebBrowser3) 在表单上放置一个Timer 并将其interval 设置为300 并将其Enabled 设置为true 4) 附加Load 事件表格至Form1_Load5) 将网络浏览器的DocumentCompleted 事件附加到webBrowser1_DocumentCompleted 6) 将定时器的Tick 事件附加到timer1_Tick7) 运行程序,将鼠标移到浏览器上,大约几秒钟不要移动,然后再移动,看看结果。
    • 好的!我的问题是我没有启用计时器。再次感谢你。完美答案!
    • Reza,我刚刚意识到如果我专注于在网络浏览器上闪烁元素,光标会一直显示,你知道为什么吗?
    • 嗯,目前我对闪光灯一无所知。 也许 flash active-x 对光标有自己的控制。如果您无法用 flash 解决问题,请发布一个包含重现步骤的新问题,其中包含重现问题的 URL,我会看看 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多