2011-05-18 70 views
7

我有一個winform和WebBrowser控件,我正在更改選擇HTML控件中的選項。RaiseEvent(「onchange」)

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

我嘗試和選擇選項後發出的TAB鍵,它提出的onchange事件。

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

現在一切都很好。

+1

哇,好的破解! – harsimranb 2014-07-17 22:05:08

+0

不錯!好想法。 – DeeArgee 2015-11-23 14:06:18

-1

嘗試提高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"); 
+0

是的,我已經做到了,查看代碼。 – Ismail 2011-05-18 15:30:23

+0

大寫字母c,onChange(儘管我認爲它沒有區別)。 – 2011-05-18 15:33:59

+0

是的,它沒有任何區別。我嘗試了兩個。 – Ismail 2011-05-18 15:40:34

1

有關詳細信息,請參閱下面的代碼。

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