0

我在用 C# 编程我需要把一些东西放在一个字符串'xml'中

我有以下代码

        TextBox[] myTextBoxes = new TextBox[] { this.textBox2, this.textBox3, this.textBox4, this.textBox5, this.textBox6, this.textBox7, this.textBox8, this.textBox9, this.textBox10, this.textBox11 };
        TextBox[] ValueBoxes = new TextBox[] { this.textBox3, this.textBox5, this.textBox7, this.textBox9, this.textBox11 };
        CheckBox[] myCheckBoxes = new CheckBox[] { this.checkBox2, this.checkBox4, this.checkBox6, this.checkBox8, this.checkBox10 };
        CheckBox[] myMandBoxes = new CheckBox[] { this.checkBox3, this.checkBox5, this.checkBox7, this.checkBox9, this.checkBox11 };

并验证我的某些条件

 xml += "<fields>";

        for (int i = 0; i < myTextBoxes.Length; i++)
        {
            if (string.IsNullOrWhiteSpace(myTextBoxes[i].Text))
            {
                if (myCheckBoxes[i].Checked == true)
                    xml += "<field display='yes'> ";
                else
                    xml += "<field display='no'> ";
                if (myMandBoxes[i].Checked == true)
                    xml += "<mandatory='yes'>";
                else
                    xml += "<Mandatory='no'>";
                xml += "<label>" + (string)myTextBoxes[i].Text + "</label>";

            }
        }

它在 if (myCheckBoxes[i].Checked == true) 处给了我一个 Indexoutof boud 异常

我该如何解决这个问题

4

7 回答 7

2

您的数组中包含不同数量的元素,因此您无法使用相同的索引访问它们。他们必须独立完成。

于 2012-11-27T10:10:44.727 回答
0

您没有与文本框相同数量的复选框,因此您无法针对相同的索引访问它们。您的索引从0to开始myTextBoxes.Length,如果i要大于4,那么您将收到此异常。

不太确定您要做什么,但您可以在从 myCheckBoxes 访问元素之前添加对长度的检查。

if (i < myCheckBoxes.Length && myCheckBoxes[i].Checked == true)
        xml += "<field display='yes'> ";
于 2012-11-27T10:09:18.387 回答
0

改用 Foreach

这里编辑为myTextBoxes.Length - 1

for (int i = 0; i < myTextBoxes.Length - 1; i++) 

编辑:

此外,您的复选框计数和 Textox 计数不相符

于 2012-11-27T10:10:33.873 回答
0

您的 for 循环正在运行myTextBoxes.length,但您正在迭代myCheckBoxes。看来你有textboxes更多CheckBoxes

将其更改为:

for (int i = 0; i < myCheckBoxes.Length; i++) {

于 2012-11-27T10:11:00.897 回答
0

代替

for (int i = 0; i < myTextBoxes.Length; i++)

采用

for (int i = 0; i < myCheckBoxes.Length; i++) // or myMandBoxes.Length (Both the CheckBoxes have same items)

因为您正在使用 CheckBoxes 进行循环,所以为什么要使用 TextBox 的长度。

于 2012-11-27T10:11:08.580 回答
0

您的文本框有 11 个元素,而复选框有 5 个元素。

更改以下

 if (string.IsNullOrWhiteSpace(myTextBoxes[i].Text))

 if (string.IsNullOrWhiteSpace(myTextBoxes[i].Text) && i < myCheckBoxes.Length )
于 2012-11-27T10:11:19.633 回答
0

首先,在用循环构造字符串时,千万不要在字符串上使用 +=,它们是不可变的,这样使用它只会浪费速度和内存。请改用StringBuilder实例。

至于你的问题,myTextBoxes数组的长度是 10,所以你有索引 0 到 9 的项目。这一行中的代码

if (myCheckBoxes[i].Checked == true)

尝试访问myCheckBoxes具有 5 个元素(索引 0 到 4)的数组中的相应项。当i变为 5 时,代码访问myCheckBoxes[5]不存在的,因此异常。

除此之外,textBox2或者checkBox7只是糟糕的控件名称,.net 框架中有更好的选项用于 XML 序列化和生成。

于 2012-11-27T10:12:57.550 回答