2016-01-27 92 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

相关问题