的RaiseEvent( “平变化”)

时间:2011-05-18 12:24:14

标签: c# webbrowser-control

我有一个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");

但徒劳无功。

3 个答案:

答案 0 :(得分:3)

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

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

现在一切都很好。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

请参阅以下代码了解详情。

@Singleton