C# RaiseEvent(“onchange”)

C# RaiseEvent(“onchange”),c#,webbrowser-control,C#,Webbrowser Control,我有一个winform和一个WebBrowser控件,我正在更改select HTML控件中的一个选项 webBrowser1.Document .GetElementsByTagName("select")[4] .GetElementsByTagName("option")[13] .SetAttribute("selected", "true"); 现在它可以工作并选择所需的选项,但不会触发onchange事件。select没有元素id,但有类名 我试过: web

我有一个winform和一个
WebBrowser
控件,我正在更改select HTML控件中的一个选项

webBrowser1.Document
    .GetElementsByTagName("select")[4]
    .GetElementsByTagName("option")[13]
    .SetAttribute("selected", "true");
现在它可以工作并选择所需的选项,但不会触发
onchange
事件。select没有元素id,但有类名

我试过:

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


但是徒劳无功。

尝试在一次更改事件中引发:例如,RaiseEvent(“一次更改”)

编辑:它将位于选择元素上,而不是选项上

编辑2:

var selectControlElement = webBrowser1.Document
    .GetElementsByTagName("select")[4];
selectControlElement.RaiseEvent("onChange");
同样值得检查selectControlElement,看看它是否有任何事件

另一个选项(未经我测试)

也尝试

selectControlElement.InvokeMember("onchange");

我在选择一个选项后尝试并发送了一个TAB键,它引发了onchange事件

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

现在一切都很好。

有关详细信息,请参阅下面的代码。

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

大写c,在onChange中(虽然我认为这没有什么区别)。抱歉,我错误地点击了向下箭头,不是故意的,尝试点击向上箭头,但它随后转到+1。。。不知道怎么让它保持在0:S
    webBrowser1.Document.GetElementsByTagName("select")[4].Focus();
    webBrowser1.Document.GetElementsByTagName("select")[4]
.GetElementsByTagName("option")[13].SetAttribute("selected", "true");
    SendKeys.Send("{TAB}");
    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;
            }
        }
    }