C# 尝试在WebBrowser控件(AJAX)中选择下拉列表的值
我试图从第二个下拉列表中选择一个动态更新的值 下面是第二个下拉列表的代码:C# 尝试在WebBrowser控件(AJAX)中选择下拉列表的值,c#,ajax,winforms,drop-down-menu,webbrowser-control,C#,Ajax,Winforms,Drop Down Menu,Webbrowser Control,我试图从第二个下拉列表中选择一个动态更新的值 下面是第二个下拉列表的代码: HtmlElementCollection select = x.GetElementsByTagName("select"); foreach (HtmlElement el in select) { if (el.Name == "color") { foreach (HtmlElement ele in el.GetElementsByTagName("option"))
HtmlElementCollection select = x.GetElementsByTagName("select");
foreach (HtmlElement el in select)
{
if (el.Name == "color")
{
foreach (HtmlElement ele in el.GetElementsByTagName("option"))
{
//MessageBox.Show(ele.InnerHtml);
if (ele.InnerText == "green")
{
ele.Focus();
ele.SetAttribute("selected", "selected");
el.InvokeMember("onchange");
ele.RemoveFocus();
break;
}
}
}
}
该代码可以工作,但仅当我使用MessageBox语句时。
如果我对MessageBox行进行注释,则不会选择下拉选项
MessageBox引发了什么事件?我对您看到的行为没有解释,但在我过去广泛使用WebBrowser控件的工作中,我也遇到了一些无法解释的行为 无论如何,以下是一些你可以尝试的东西:
- 我假设您通过其他方式验证了当您没有放置MessageBox语句时,if子句的内部部分是否得到执行
- 只需将ele.InnerHtml分配给一个字符串(可以对该字符串执行某些操作,以确保JIT不会将其优化掉)。访问InnerHtml可能会触发元素中导致事件工作的某些内容
- 不要设置“selected”属性并调用“onchange”,而是尝试设置IHTMLSelectElement的ele.selectedIndex
- 通常,您不必显式地调用“onchange”。如果JavaScript代码订阅了该事件,IE应该自动调用该事件
- 此方法是否在UI线程上执行?我发现当您从后台线程访问DOM时,WebBrowser的行为可能会很奇怪。如果不是UI线程,请使用Invoke将方法执行封送至UI线程