Событие повышения(«onchange»)

#c# #webbrowser-control

Вопрос:

У меня есть winform и WebBrowser элемент управления, и я меняю опцию в элементе управления select HTML.

 webBrowser1.Document
    .GetElementsByTagName("select")[4]
    .GetElementsByTagName("option")[13]
    .SetAttribute("selected", "true");
 

Теперь он работает и выбирает нужную опцию, но не запускает onchange событие. У выбранного элемента нет идентификатора элемента, но у него есть имя класса.

Я пытался:

 webBrowser1.Document
    .GetElementsByTagName("select")[4]
    .RaiseEvent("onchange");
 

и

 webBrowser1.Document
    .GetElementsByTagName("select")[4]
    .GetElementsByTagName("option")[13]
    .RaiseEvent("onchange");
 

Но тщетно.

Ответ №1:

Я попытался и отправил клавишу TAB после выбора опции, и это вызвало событие onchange.

     webBrowser1.Document.GetElementsByTagName("select")[4].Focus();
    webBrowser1.Document.GetElementsByTagName("select")[4]
.GetElementsByTagName("option")[13].SetAttribute("selected", "true");
    SendKeys.Send("{TAB}");
 

Сейчас все хорошо.

Ответ №2:

попробуйте вызвать событие onChange: например, RaiseEvent(«onChange»);

РЕДАКТИРОВАТЬ: это будет в элементе выбора, а не в опции.

ПРАВКА2:

 var selectControlElement = webBrowser1.Document
    .GetElementsByTagName("select")[4];
selectControlElement.RaiseEvent("onChange");
 

Также стоит проверить элемент selectControlElement, чтобы узнать, есть ли у него какие-либо события.

Другой вариант (не проверенный мной)

 object obj = selectControlElement.DomElement;
System.Reflection.MethodInfo mi = obj.GetType().GetMethod("onchange");
mi.Invoke(obj, new object[0]);
 

Также попробуйте

 selectControlElement.InvokeMember("onchange");
 

Комментарии:

1. заглавная буква c, в onChange (хотя я думал, что это не имеет значения).

2. Извиняюсь, я неправильно указал на стрелку вниз, не имел это в виду, попытался щелкнуть стрелку вверх, но затем она переходит в 1… не знаю, как оставить ее на нуле :S

Ответ №3:

Пожалуйста, ознакомьтесь с кодом ниже для получения подробной информации.

     void SetComboItem(string id, string value)
    {

        Forms.HtmlElement ddRouteSelected = wBrowser.Document.GetElementById(id);
        foreach (Forms.HtmlElement item in ddRouteSelected.Children)
        {
            if (item.InnerText != null amp;amp; item.InnerText.ToLower().Equals(value.ToLower()))
            {
                item.SetAttribute("selected", "Selected");
                item.SetAttribute("value", value);
                ddRouteSelected.InvokeMember("onchange");
                break;
            }
        }
    }