在C#中为HtmlDocument.MouseDown分配事件处理程序的正确方法?

时间:2010-06-28 16:14:23

标签: c# .net

由于您只能在加载文档后分配它,并且每次加载文档时都不需要分配它,我是否除了做这样的事情之外别无其他选择?

private void WebBrowser_DocumentCompleted(object sender,
    WebBrowserDocumentCompletedEventArgs e)
{
    if (!mouseDownAssigned) // mouseDownAssigned is a bool with start value false
    {
        mouseDownAssigned = true;
        this.Document.MouseDown += 
            new HtmlElementEventHandler(Document_MouseDown);
    }
}

哪个有点丑,不优雅。感觉这不是微软想到的。

2 个答案:

答案 0 :(得分:0)

我不相信这也是MS的想法。如果我不得不猜测,它来自这样一个事实,即文档和Web浏览器之间存在某种代理,它执行事件处理,只在加载第一个文档时进行初始化,而不是在加载控件时。< / p>

答案 1 :(得分:0)

我认为这是最接近优雅解决方案的:

    public MyWebBrowser()
    {
        InitializeComponent();
        this.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentCompleted);
        this.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentFirstCompleted);
    }

    private void SuperWebBrowser_DocumentFirstCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        this.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentFirstCompleted);
        this.Document.MouseDown += new HtmlElementEventHandler(Document_MouseDown);
    }

    private void SuperWebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
    }

这样我每次文档完成时都不需要检查变量。猜猜这有点像微软的想法。