2016-11-19 56 views
1

我想使用C#WebControl更改下拉控件中的選定選項。爲什麼我不能在C#WebBrowser控件中選擇下拉選項?

的HTML如下:

<select data-dropdownify-type="month" data-dropdownify-label="Maand" name="birthday.month"> 
    <option value=""></option> 
     <option value="1">January</option> 
     <option value="2">February</option> 
     <option value="3">March</option> 
     <option value="4" selected="selected">April</option> 
     <option value="5">May</option> 
     <option value="6">June</option> 
     <option value="7">July</option> 
     <option value="8">August</option> 
     <option value="9">September</option> 
     <option value="10">October</option> 
     <option value="11">November</option> 
     <option value="12">December</option> 
    </select> 

我嘗試使用此代碼首先要選擇一個選項:

br.Document.GetElementsByTagName("select").GetElementsByName("birthday.month")[0].SetAttribute("value", "2"); 

但它並沒有爲我工作了,我沒有看到任何錯誤但選定的選項沒有改變。

於是我開始尋找在互聯網上,發現還有另一種方式來做到這一點所以後來我試着用此代碼更改的選項:

br.Document.GetElementsByTagName("select").GetElementsByName("birthday.month")[0].Children[2].SetAttribute("selected", "selected"); 

但是,這也不能工作!我再次看到沒有錯誤,但選定的選項沒有改變。有沒有其他辦法可以做到這一點?我想也許它與dropdownify有關,但我不確定。

+0

你的意思是winforms webbrowser或webcontrol?如果你的意思是網絡瀏覽器,你在哪裏放置代碼來改變選定的元素?確保它在Web瀏覽器控件的DocumentCompleted事件中(或之後) – KMoussa

回答

0

要從select元素中選擇選項,請使用selectedIndex。在這個例子中,使用了非託管的MSHTML庫。 HTH

using System; 
using System.Linq; 
using System.Windows.Forms; 
using mshtml; 

// This code was written under the assumption that your form has a 
// WebBrowser control named WebBrowser1, 
// and that you have added the unmanaged MSHTML library as a reference to your project. 

namespace WebClientDemo 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      webBrowser1.Navigate(<your-url-here>); 
     } 

     private void webBrowser1_DocumentCompleted(object sender, 
              WebBrowserDocumentCompletedEventArgs e) 
     { 
      if (webBrowser1.Document == null) 
       return; 
      IHTMLDocument2 iDoc = (IHTMLDocument2)webBrowser1.Document.DomDocument; 
      HTMLSelectElement selectElement = iDoc?.all.OfType<HTMLSelectElement>() 
            .FirstOrDefault(s => s.name == "birthday.month"); 
      if (selectElement != null) 
      { 
       selectElement.selectedIndex = 2; 
      } 
     } 
    } 
} 
相關問題