1

0から9まで順番に名前が付けられたテキストボックスの値を取得し、forループを使用してリストに追加しようとしています。構文などに問題があります。

これが私が今持っているものです。

for (int i = 0; i <= amt.Count(); i++)
        {
            amt[i] = int.Parse(amtBox[i].Text);
        }

エラーは、amtBoxが現在のコンテキストに存在しないことです。

私の問題は、amtBox[i].Textがあるループ内にあります。私はこれをいくつかの方法で試しましたが、VSは常にエラーをスローします。「amtBox」+iを試しましたが、コンパイルされますが、何かを実行しようとすると「データの型が間違っています」というエラーが発生します。

私はC#を初めて使用し、PHPを使用しているので、このアプローチが機能すると思うのはそのためかもしれません。PHPは、C#が実際に行うデータ型を気にしません。私はこれをPHPで何回も問題なく実行しました。

私はおそらくこれがすべて間違っているので、これを行うための別の方法に関する提案はありがたいです。

ありがとう

4

3 に答える 3

1

テキストボックスの名前は「amtBox」+数字だと思います。(Nameプロパティは例として「amtBox1」です)

この場合、あなたは使用することができます

 Control[] t = Controls.Find("amtBox" + i, false);

このようなコードの場合

for (int i = 0; i <= amt.Count(); i++)  
{  
    Control[] t = Controls.Find("amtBox" + i, false);
    if(t != null && t.Length > 0)
    {
        amt[i] = int.Parse(t[0].Text);  
    }
} 
于 2012-08-27T21:53:08.983 に答える
1

1つの解決策は、配列を宣言し、amtBoxを配列内の個々のインデックスに割り当ててから、その配列を反復処理できるようにすることです。

var amtBoxes = new TextBox[] { amtBox0, amtBox1, .... };
for (int i = 0; i <= amt.Count(); i++)
{
    amt[i] = int.Parse(amtBoxes[i].Text);
}

他の場所でTextBoxコントロールを反復処理する必要がある場合は、配列をオブジェクトのインスタンスメンバーにすることを検討します。

于 2012-08-27T21:55:29.630 に答える
0

私の理解では、、などの名前のテキストボックスがamtBox1ありamtBox2、実行しようとしているのはそれらを順番に並べることです。ご指摘のとおり、これはPHPでは非常に簡単です。リフレクションを使用して提案していることを実行することは可能ですが、それは費用がかかり、いずれにしても、探していることを実行するためのより良い方法がおそらくあります。

すべての金額ボックスを配列に入れると、次のように機能します。

var amtBoxes = new[] {
    amtBox1,
    amtBox2,
    amtBox3
}
于 2012-08-27T21:54:40.147 に答える