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

テキストボックスと同じ数のチェックボックスがないため、同じインデックスに対してチェックボックスにアクセスすることはできません。インデックスはからから始まります。がより大きくなる場合0は、この例外が発生します。myTextBoxes.Lengthi4

何をしようとしているのかよくわかりませんが、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++) 

編集:

また、checkBoxカウントと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

まず第一に、ループで文字列を構築するときは文字列に += を使用しないでください。文字列はimmutableであり、このように使用すると、速度とメモリが無駄になります。StringBuilder代わりにインスタンスを使用してください。

あなたの質問に関しては、配列の長さmyTextBoxesは 10 なので、インデックス 0 から 9 に項目があります。この行のコードは

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

myCheckBoxes5 つの要素 (インデックス 0 から 4) を持つ配列内の対応する項目へのアクセスを試みます。が 5になると、コードは存在しない にiアクセスするため、例外が発生します。myCheckBoxes[5]

それ以外に、textBox2またはcheckBox7単にコントロールのひどい名前であり、.net Framework には XML のシリアル化と生成のためのより良いオプションがあります。

于 2012-11-27T10:12:57.550 に答える