#c# #webbrowser-control
Вопрос:
У меня есть winform и WebBrowser
элемент управления, и я меняю опцию в элементе управления select HTML.
webBrowser1.Document
.GetElementsByTagName("select")[4]
.GetElementsByTagName("option")[13]
.SetAttribute("selected", "true");
Теперь он работает и выбирает нужную опцию, но не запускает onchange
событие. У выбранного элемента нет идентификатора элемента, но у него есть имя класса.
Я пытался:
webBrowser1.Document
.GetElementsByTagName("select")[4]
.RaiseEvent("onchange");
и
webBrowser1.Document
.GetElementsByTagName("select")[4]
.GetElementsByTagName("option")[13]
.RaiseEvent("onchange");
Но тщетно.
Ответ №1:
Я попытался и отправил клавишу TAB после выбора опции, и это вызвало событие onchange.
webBrowser1.Document.GetElementsByTagName("select")[4].Focus();
webBrowser1.Document.GetElementsByTagName("select")[4]
.GetElementsByTagName("option")[13].SetAttribute("selected", "true");
SendKeys.Send("{TAB}");
Сейчас все хорошо.
Ответ №2:
попробуйте вызвать событие 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");
Комментарии:
1. заглавная буква c, в onChange (хотя я думал, что это не имеет значения).
2. Извиняюсь, я неправильно указал на стрелку вниз, не имел это в виду, попытался щелкнуть стрелку вверх, но затем она переходит в 1… не знаю, как оставить ее на нуле :S
Ответ №3:
Пожалуйста, ознакомьтесь с кодом ниже для получения подробной информации.
void SetComboItem(string id, string value)
{
Forms.HtmlElement ddRouteSelected = wBrowser.Document.GetElementById(id);
foreach (Forms.HtmlElement item in ddRouteSelected.Children)
{
if (item.InnerText != null amp;amp; item.InnerText.ToLower().Equals(value.ToLower()))
{
item.SetAttribute("selected", "Selected");
item.SetAttribute("value", value);
ddRouteSelected.InvokeMember("onchange");
break;
}
}
}