Как обработать событие в webbrowser только 1 раз? - C#

262
04 июня 2018, 06:30

Подскажите пожалуйста как обработать событие только 1 раз? Обрабатывается один раз потому-что при клике на элемент вылазиет еще модальное окно и.т.д. И выдает несколько раз element. В WebBrowser грузится страничка Яндекс Картинки. При клике на какую нибудь картинку я должен получать ссылку для дальнейшей ее обработки. Но получаю две ссылки с одного клика одинаковых соответственно.

Код:

namespace av_export
{
  public partial class MainForm : Form
  {
    public MainForm()
    {
      InitializeComponent();
      webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
            string urlo = "https://yandex.ru/images/search?family=yes&text=красивые+обои";
            webBrowser1.Navigate(urlo);
    }
    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
      webBrowser1.Document.Click += webBrowser1_Browser_Mouse_Moved;

        }
    private void webBrowser1_Browser_Mouse_Moved(object sender, HtmlElementEventArgs e)
        {
      webBrowser1.Navigating += webBrowser1_Navigating;
      string element = webBrowser1.Document.GetElementFromPoint(e.ClientMousePosition).GetAttribute("href");
      Debug.WriteLine(element);
            webBrowser1.Navigating += webBrowser1_Navigating;
        }
    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            e.Cancel = true;
        }
  }
}

Результат:

https://yandex.ru/images/search?text=Suprotec%204660007120727&img_url=https%3A%2F%2Fstatic.1k.by%2Fimages%2Fproducts%2Fip%2Fbig%2Fpp9%2F5%2F1355337%2Fia33dd4833.jpg&pos=0&rpt=simage&family=yes
https://yandex.ru/images/search?text=Suprotec%204660007120727&img_url=https%3A%2F%2Fstatic.1k.by%2Fimages%2Fproducts%2Fip%2Fbig%2Fpp9%2F5%2F1355337%2Fia33dd4833.jpg&pos=0&rpt=simage&family=yes

Спасибо заранее!

Answer 1

добавил отписку от события

public partial class MainForm : Form
{
    WebBrowser webBrowser1;
    public MainForm()
    {
        this.Width = 500;
        this.Height = 500;
        webBrowser1 = new WebBrowser() {Width = 500, Height = 500};

        this.Controls.Add(webBrowser1);

        webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
        string urlo = "https://yandex.ru/images/search?family=yes&text=красивые+обои";
        webBrowser1.Navigate(urlo);
    }
    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted; // отписка  
        webBrowser1.Document.Click += webBrowser1_Browser_Mouse_Moved;          
    }
    private void webBrowser1_Browser_Mouse_Moved(object sender, HtmlElementEventArgs e)
    {       
        webBrowser1.Document.Click -= webBrowser1_Browser_Mouse_Moved; // отписка   
        webBrowser1.Navigating += webBrowser1_Navigating;
        string element = webBrowser1.Document.GetElementFromPoint(e.ClientMousePosition).GetAttribute("href");
        Debug.WriteLine(element);
        //webBrowser1.Navigating += webBrowser1_Navigating;
    }
    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        webBrowser1.Navigating -= webBrowser1_Navigating; // отписка
        e.Cancel = true;
    }
}
READ ALSO
Можно ли сделать так,чтобы спрайт отображался поверх объекта либо исчезал со сцены на время их пересечения?

Можно ли сделать так,чтобы спрайт отображался поверх объекта либо исчезал со сцены на время их пересечения?

Проблема состоит в том,что healthBar это UI объект (слайдер) и он перекрывает спрайт летящего самолета

261
Как в c# выбрать нужные ячейки из Excel?

Как в c# выбрать нужные ячейки из Excel?

В общем, есть документ excel в котором есть 2 нужных столбцаСтолбцы с данными от J7 до n и от K7 до n

223
C# многопоточость

C# многопоточость

Пишу самый обычный чат з помощью SocketТакой вопрос: на каждого пользователя, который подключился стоит выделять отдельный поток или все делать...

242
Azure Service Bus

Azure Service Bus

Есть ли возможность удалить сообщение из Azure Service Bus Topic по его идентификатору?

222