C#foreach循环不使用正确的索引

时间:2015-02-05 09:53:27

标签: c# foreach browser

我尝试解析我的richTextBox并在每次在richTextBox中都有一个新行时调用我的函数。

例如,在我的richTextBox中,我将:

A
B
C

对于每个值,我想调用我的函数" removePO()"与相关的值。 但我的代码只使用最后一个元素(在我们的例子中,它只使用" C")

这是我的代码:

//Global vars
string[] lines;

function a(){
    // .... some stuff

    // I get the value of my rich TextBox
    lines = richTextBox1.Lines;

    //Foreach value, I call my remove function
    foreach(String line in lines)
    {
        removePO();
    }
}

private void removePO()
    {
        webBrowser1.Document.GetElementById("ctl00_cphContent_txtSAPOrderId").SetAttribute("value", "00" + line);
        webBrowser1.Document.GetElementById("ctl00_cphContent_btnSearchOrder").InvokeMember("Click");
        while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
        {
            Application.DoEvents();
        }
        SendKeys.Send(username);
        SendKeys.Send("{TAB}");
        SendKeys.Send(password);
        SendKeys.Send("{ENTER}");

        webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
    }

protected void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        try
        {
            HtmlElement el = webBrowser1.Document.GetElementById("content").GetElementsByTagName("a")[0];
            String anchorText = el.InnerText; // will contain "K"
            String url = el.GetAttribute("href"); // will contain "test"
            el.SetAttribute("onclick", "true");
            el.InvokeMember("Click");
            webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted2;
        }
        catch(Exception ex)
        {
            Console.WriteLine("Ex Exception : " + ex);
        }
    }

protected void webBrowser1_DocumentCompleted2(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        try
        {
            HtmlElement delete = webBrowser1.Document.GetElementById("ctl00_cphContent_lnkDeleteRequest");
            delete.SetAttribute("onclick", "true");
            delete.InvokeMember("Click");
        }
        catch (Exception delete)
        {
            Console.WriteLine("Delete Exception : "+delete);
        }

    }

你知道为什么这不起作用吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

你的方法应如下所示:

private void removePO(string lineOfElement)
{
    webBrowser1.Document.GetElementById("ctl00_cphContent_txtSAPOrderId").SetAttribute("value", "00" + lineOfElement);
    webBrowser1.Document.GetElementById("ctl00_cphContent_btnSearchOrder").InvokeMember("Click");
    while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
    //...
}

并且它的召唤是这样的:

//Foreach value, I call my remove function
foreach(String line in lines)
{
    removePO(line);
}

然后你总是使用来自foreach-Iteration的实际字符串行。

否则removePO中的行必须是全局变量。但是,您并未在foreach中为line分配removePO。这就是为什么它不能像你编程那样工作

答案 1 :(得分:0)

void removePO()的签名更改为void removePO(string ine),并将来电removePO()更改为removePO(line)