2016-01-27 127 views
0
private void button5_Click(object sender, EventArgs e) 
{ 
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input"); 
    foreach (HtmlElement link in links) 
    { 
     if (link.GetAttribute("className")== "input-style1 psgn-name") 
     { 
      textBox10.Text = link.GetAttribute("id"); 
     } 
    } 
} 

結果:我只得到第4個元素id的id與4個元素中的同一個類。現在如何獲得3元素id的其餘部分?獲取元素ID使用類名與C中具有相同類名稱的多個元素#

+0

你得到它們全部,但textBox10.Text屬性的值總是用新值替換。嘗試調試您的代碼,你會看到 – Alekstim

回答

0

您覆蓋與循環的每個迭代的文本值。

更新代碼:

private void button5_Click(object sender, EventArgs e) 
{ 
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input"); 

    foreach (HtmlElement link in links) 
    { 
     if (link.GetAttribute("className")== "input-style1 psgn-name") 
     { 
       textBox10.Text += link.GetAttribute("id"); 
     } 
    } 
} 

如果你想說的話放,如果他們在不同的文本框中存在找到了前四個項目,那麼你就需要來填充列表,然後引用它,像這樣:

private void button5_Click(object sender, EventArgs e) 
{ 
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input"); 
    List<String> results = new List<String>(); 
    foreach (HtmlElement link in links) 
    { 
     if (link.GetAttribute("className")== "input-style1 psgn-name") 
     { 
       results.Add(link.GetAttribute("id")); 
     } 
    } 
    textbox10.Text = results[0]; 
    textbox11.Text = results[1]; etc.... 
} 

使用LINQ使得一個更優雅的解決方案:

//需要使用System.Linq的

String[] results = (from itm in links where itm.GetAttribute("className") == "input-style1 psgn-name" select itm.GetAttribute("id")).ToArray(); 

然後用數組元素填充你的方框。

+0

謝謝...... ..但如何讓每個ID在不同的文本框中 –

0

在您的文本框中,您每次都會覆蓋該ID。您需要連接文本框中的字符串。所以...

private void button5_Click(object sender, EventArgs e) 
{ 
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input"); 
    foreach (HtmlElement link in links) 
    { 
     if (link.GetAttribute("className")== "input-style1 psgn-name") 
     { 
      textBox10.Text += link.GetAttribute("id") + ","; 
     } 
    } 

    // Remove last comma 
    if(!string.IsNullOrWhiteSpace(textBox10.Text)){ 
     textBox10.Text = textBox10.Text.Substring(0, textBox10.Text.Length - 1); 
    } 
} 

現在在您的文本框中,您可以看到以逗號分隔的元素的ID列表。

如果你想設置不同的文本框:

private void button5_Click(object sender, EventArgs e) 
{ 
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input"); 
    int i = 10; 
    foreach (HtmlElement link in links) 
    { 
     if (link.GetAttribute("className")== "input-style1 psgn-name") 
     { 
      foreach(Control ctrl in Controls) 
      { 
       if (ctrl is TextBox){ 
        TextBox tb = (CheckBox)c; 
        if(tb.Name == "textBox" + i) { 
         i++; 
         tb.Text = link.GetAttribute("id"); 
        } 
       } 
      } 
     } 
    } 
} 

或者

private void button5_Click(object sender, EventArgs e) 
{ 
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input"); 
    int i = 10; 
    foreach (HtmlElement link in links) 
    { 
     if (link.GetAttribute("className")== "input-style1 psgn-name") 
     { 
      TextBox tb = Controls.Find("textBox" + i) as TextBox; 
      i++; 

      if(tb != null) { 
       tb.Text = link.GetAttribute("id"); 
      } 
     } 
    } 
} 
+0

謝謝........但如何讓每個id在不同的文本框 –

+0

您需要不同的文本框foreach id。如果你已經有不同的文本框,你可以使用反射來獲取它們,否則你需要在你的foreach中創建一個文本框,然後將它添加到你的視圖 – erikscandola

+0

@RigzinAngchok我用兩種解決方案更新了代碼 – erikscandola

相關問題