的RaiseEvent(“平变化”)

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

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

现在它可以工作并选择所需的选项,但它不会触发onchange事件。 select没有元素id,但它有一个类名。

我试过了:

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

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

但徒劳无功。

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

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

现在一切都很好。

尝试提高onChange事件:例如RaiseEvent(“onChange”);

编辑:它将在选择元素上,而不是选项。

EDIT2:

 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"); 

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

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