Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中为HtmlDocument.MouseDown分配事件处理程序的正确方法?_C#_.net - Fatal编程技术网

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

C# 在C中为HtmlDocument.MouseDown分配事件处理程序的正确方法?,c#,.net,C#,.net,既然您只能在加载文档后分配它,并且您不需要每次加载文档时都分配它,那么除了这样做,我难道没有其他选择吗 private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!mouseDownAssigned) // mouseDownAssigned is a bool with start value false {

既然您只能在加载文档后分配它,并且您不需要每次加载文档时都分配它,那么除了这样做,我难道没有其他选择吗

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

这有点难看也不优雅。我觉得这不是微软的想法。

我也不相信微软的想法。如果我不得不猜测的话,这是因为文档和web浏览器之间存在某种代理,它执行事件处理,只有在加载第一个文档时才会初始化,而不是在加载控件时初始化。我认为这是最接近完美的解决方案:

    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)
    {
    }

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

在我看来没那么糟糕。你认为什么样的代码更优雅?我也有同样的问题…我必须找到另一种方法去做我想做的事,你想做什么?