RaiseEvent ( "OnChange") - PullRequest
       7

RaiseEvent ( "OnChange")

7 голосов
/ 18 мая 2011

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

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

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

Я пытался:

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

и

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

Но напрасно.

Ответы [ 3 ]

3 голосов
/ 19 мая 2011

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

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

Теперь все хорошо.

0 голосов
/ 10 января 2018

Пожалуйста, смотрите код ниже для деталей.

    void SetComboItem(string id, string value)
    {

        Forms.HtmlElement ddRouteSelected = wBrowser.Document.GetElementById(id);
        foreach (Forms.HtmlElement item in ddRouteSelected.Children)
        {
            if (item.InnerText != null && item.InnerText.ToLower().Equals(value.ToLower()))
            {
                item.SetAttribute("selected", "Selected");
                item.SetAttribute("value", value);
                ddRouteSelected.InvokeMember("onchange");
                break;
            }
        }
    }
0 голосов
/ 18 мая 2011

попробуйте вызвать событие 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");
...