C # webBrowser HTMLDoc.Click срабатывает более одного раза, почему? - PullRequest
1 голос
/ 17 ноября 2010

У меня есть код ниже, но когда я нажимаю на веб-страницу, она срабатывает 2-6 раз. Как я могу сделать это просто один раз?

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
   if (webBrowser1.Document != null)
   {
      htmlDoc = webBrowser1.Document;
      htmlDoc.Click += htmlDoc_Click;
      //htmlDoc.MouseDown += htmlDoc_MouseDown;
      //htmlDoc.MouseMove += htmlDoc_MouseMove;
      htmlDoc.ContextMenuShowing += htmlDoc_ContextMenuShowing;
   }
}

void htmlDoc_Click(object sender, HtmlElementEventArgs e)
{
   Console.WriteLine("Mouse Click");
   if (e.CtrlKeyPressed)
   {
      if (webBrowser1.Document.GetElementFromPoint(e.ClientMousePosition).InnerHtml != null)
      {
        //MessageBox.Show(webBrowser1.Document.GetElementFromPoint(webBrowser1.PointToClient(MousePosition)).InnerText.ToString());
        Debug.WriteLine(webBrowser1.Document.GetElementFromPoint(e.ClientMousePosition).InnerHtml);
      }

      e.ReturnValue = false;
      return;
   }

   // stop mouse events moving on to the HTML doc return false
   e.ReturnValue = true;
}

Ответы [ 2 ]

3 голосов
/ 17 ноября 2010

Если веб-страница, которую вы посещаете, содержит фреймы, то событие DocumentCompleted будет запускаться несколько раз, по одному для каждого фрейма.И, таким образом, вы будете подписываться на событие несколько раз.Отфильтруйте это, проверив e.Url.Equals (webBrowser1.Url), это верно только для последнего.

Другая проблема, которую вам нужно решить, - отписаться от события, сейчас вы утечетеHTMLDocument.Обязательно отмените подписку перед вызовом Navigate ().

0 голосов
/ 17 ноября 2010

Вам нужно реализовать свой собственный метод Dispose и отписаться от всех событий:

            htmlDoc.Click -= htmlDoc_Click;

            htmlDoc.ContextMenuShowing -= htmlDoc_ContextMenuShowing;

Похоже, что ваши переменные являются глобальными, поэтому не должно быть проблемой.

...