无法将TextBox行添加到列表<string>

时间:2017-10-06 07:01:23

标签: c# winforms

我一直在处理来自应用程序abd的窗口我似乎遇到了一个问题,我在尝试将文本框行添加到列表时遇到Index as out of rang of array

我目前的代码如下:

 if (NameTB.Lines.Count() > 0)
                for (int i = 1; 1 <= NameTB.Lines.Count(); i++)
                    nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());

我也试过这个:

    if (NameTB.Lines.Length > 0)
        for (int i = 1; 1 <= NameTB.Lines.Length; i++)
            nameList.Add(NameTB.Text[i - 1].ToString().Replace(Environment.NewLine, "").Trim());

        if (NameTB.Lines.Count() > 0)
            for (int i = 1; 1 <= NameTB.Lines.Count(); i++)
                nameList.Add(Convert.ToString(i).Replace(Environment.NewLine, "").Trim());

此外,尽管最后一个示例没有给出索引错误但却陷入了循环。我以前做过类似的事情,但使用WPFTextBox.GetLineText,但要确定如何在Winforms

中实现相同的目标

4 个答案:

答案 0 :(得分:3)

使用此:

if (NameTB.Lines.Count() > 0)
    for (int i = 0; i < NameTB.Lines.Count(); i++) //or i <= NameTB.Lines.Count() - 1
        nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());

c#中的索引是从0开始的,所以你需要从0开始(当然如果你不想从第二个元素开始)。

当然IndexOutOfRangeException条件引起的无限循环和1 <= NameTB.Lines.Count();问题,您的i无休止地增加,但NameTB.Lines的数量有限元素,因此您应该使用i而不是1

但只有将1更改为i才能解决您的问题,因为任何数组/集合中的元素数量 总是 大于最后一个元素的索引,所以你需要改变

i <= NameTB.Lines.Count();

i < NameTB.Lines.Count(); //or i <= NameTB.Lines.Count() - 1;

答案 1 :(得分:2)

请注意,数组是从零开始的,并且您的第二个参数似乎创建了一个超出最大数组索引Lines的无限循环。正确的for循环结构应该是这样的:

if (NameTB.Lines.Count() > 0) 
{
    for (int i = 0; i < NameTB.Lines.Count(); i++)
    {
        nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());
    }
}

另见:

What is an IndexOutOfRangeException / ArgumentOutOfRangeException and how do I fix it?

答案 2 :(得分:1)

1 <= NameTB.Lines.Count();

总是如此,因为你没有改变线的数量(你不应该这样)?

我想你要循环直到

i < NameTB.Lines.Count();

并希望从0开始,因为数组中的第一个索引是0

答案 3 :(得分:0)

试试这个:

if (NameTB.Lines.Count() > 0)
                for (int i = 1; i <= NameTB.Lines.Count() - 1; i++)
                    nameList.Add(NameTB.Lines[i-1].Replace(Environment.NewLine, "").Trim());