为什么()没有递增?

时间:2014-10-15 11:29:23

标签: c# winforms for-loop checkbox increment

在很大的帮助下,我能够使用此功能将动态复选框写入winForm。

参考:Dynamic Checkbox from a txt file entry on a WinForm UI

    public static void getPermText(System.Windows.Forms.Form targetForm)
    {
        Stream fileStream = File.Open(dataFolder + PermFile, FileMode.Open);
        StreamReader reader = new StreamReader(fileStream);

        string line = null;

        do
        {
            line = reader.ReadLine();
            string[] parts = line.Split('\n');

            if (line == null)
            {
                break;
            }

            try
                {

                int userCount;

                userCount = parts.Length;

                CheckBox[] chk = new CheckBox[userCount];
                int height = 1;
                int padding = 10;

                for (int i = 0; i <= userCount; i++)
                    {
                    chk[i] = new CheckBox();

                    chk[i].Name = parts.ToString();

                    chk[i].Text = parts.ToString();

                    chk[i].TabIndex = i;

                    chk[i].AutoCheck = true;

                    chk[i].Bounds = new Rectangle(15, 30 + padding + height, 150, 22);

                    targetForm.Controls.Add(chk[i]);

                    height += 22;

                    }
                }
            catch
                {
                }                

        } while (true);
    }

不幸的是我没有收到错误,我收到一个带有“System.string []”旁边文本的复选框。我很确定我只会得到一个。我注意到,我从这个程序的另一部分(以及上面提到的建议和我的个人资料中)上面的内容中遗漏了这个陈述。

        foreach (string parts in reader)

除了我得到的变量错误,StreamReader无法访问GetEnumerator。我假设这个缺少的foreach是for()语句没有递增的原因。

这是个问题。为什么这段代码没有增加,为什么它没有从part.ToString()所在的文本文件中放入行,用户名?

任何人都可以指出我正确的方向吗?我真的很感激。非常感谢你提前。 :-D

3 个答案:

答案 0 :(得分:1)

问题是因为你试图分配你的parts字符串数组。试试这个:

for (int i = 0; i <= userCount; i++)
                    {
                    chk[i] = new CheckBox();

                    chk[i].Name = parts[i];

                    chk[i].Text = parts[i];

                    chk[i].TabIndex = i;

                    chk[i].AutoCheck = true;

                    chk[i].Bounds = new Rectangle(15, 30 + padding + height, 150, 22);

                    targetForm.Controls.Add(chk[i]);

                    height += 22;

                    }

答案 1 :(得分:1)

我看到的一些问题:

  1. 您正在从文件中读取一行,然后将其拆分为新行,因此您可能只会获得一个元素。您可能需要在分隔符上拆分该行,即&#39; - &#39;或&#39;,&#39;

  2. 您正在设置check[i].Name = parts;parts是一个字符串数组,因此您的复选框仅显示&#39; System.string []&#39;。将其更改为chk[i].Name = parts[i];

答案 2 :(得分:0)

好的,这是正常运行的代码。如果有人想评论它,我当然可以使用帮助。感谢所有帮助过的人和@Grant Whinney。

    public static void getPermText(System.Windows.Forms.Form targetForm)
    {
        Stream fileStream = File.Open(dataFolder + PermFile, FileMode.Open);
        StreamReader reader = new StreamReader(fileStream);

        string line = null;

            line = reader.ReadToEnd();
            string[] parts = line.Split('\n');

            try
                {

                int userCount;

                userCount = parts.Length;

                CheckBox[] chk = new CheckBox[userCount];
                int height = 1;
                int padding = 10;

                for (int i = 0; i < userCount; i++)
                    {
                    chk[i] = new CheckBox();

                    chk[i].Name = parts[i];

                    chk[i].Text = parts[i];

                    chk[i].TabIndex = i;

                    chk[i].AutoCheck = true;

                    chk[i].Bounds = new Rectangle(15, 30 + padding + height, 150, 22);

                    targetForm.Controls.Add(chk[i]);

                    height += 22;

                    }
                }
            catch
                {

                } 
          }

基本上我转储了do()语句,将所有parts.ToString()更改为部分。[i](Sooo,SpellCheck可以绕过。:-D)并将line = reader.ReadLine()更改为。 ReadToEnd的()。它正在递增,它只是没有读过第一行,因此所有复选框都具有相同的名称。

再次感谢所有帮助过的人。我Trully欣赏它!!祝你有美好的一天!! :-D