2012-05-01 10 views
0

基本的には、以下のforステートメントは、ユーザーの入力に応じてテスト値ラベルのリストを作成します。入力文字列が正しい形式でない - ラベルの合計を計算する

2番目のforステートメントは、作成されたダイナミックラベルの合計を計算することになっていますが、再生すると「入力文字列が正しい形式ではありません」というエラーが表示されます。 tots += double.Parse(value[p].ToString());に関連するすべての助けに感謝します。おかげ

ArrayList value = new ArrayList(); 

int p =0; 

for (int i = 0; i < weight.Count; i++) 
{ 
    Label test = new Label(); 
    System.Drawing.Point l8 = new System.Drawing.Point(440, 48 + s); 
    test.Location = l8; 
    value.Add(test); 

    k += 35; 

    Label l2 = testpercent1[i] as Label; 
    Double.TryParse(l2.Text.Trim(), out label2); 
    Label l = testpercent2[i] as Label; 
    Double.TryParse(l.Text.Trim(), out label1); 
    Double testvalue = Math.Round(((label1 * .3) + (label2 * .4))); 
    test.Text = testvalue.ToString(); 
} 

Double total = 0; 
for (int p = 0; p < value.Count; p++) 
{ 
    tots += double.Parse(value[p].ToString()); 
} 
+0

あなたは 'value [p]'だけではなく、 'value'が何であるかを表示していません。 –

+0

の値はArrayList – Hashey100

+0

@ Hashey100です。変数の名前として 'l'を使用する特別な理由はありますか?特に' l8'や 'l2'のようなコンテキストでは1のように見えますか?他の人が読むと予想されるコードの変数やメソッドの名前として 'l'、' I'と 'O'を避けてください。 –

答えて

3
tots += double.Parse(((Label)value[p]).Text); 
+0

ToString()を使用する必要はありません。 –

+0

乾杯、更新済み –

1

値[p]はタイプラベルです。ラベルのテキスト値を取得する場合は、value [p] .Textを使用する必要があります。

Double total = 0; 
for (int p = 0; p < value.Count; p++) 
{ 
    tots += double.Parse(((Label)value[p]).Text); 
} 

もう一つは、あなたは、値の代わりに、ArrayListためList<Label>を使用する必要があります。

1

ラベルのToString()を解析しようとしています。代わりに、ラベルのいくつかのプロパティを解析するために探していましたか?

value[p]を呼び出すと、返されるのはLabelのオブジェクトです。ラベルのテキストを解析したい場合は、あなたのコードではなく、それはあなたがコントロールArrayListを追加している明らかだ

tots += double.Parse(((Label)value[p]).Text);

1

だろう。だから、これは動作しません:

tots += double.Parse(value[p].ToString()); 

を私は何をするあなたをreccomend:次に

value.Add(test.Text); 

tots += double.Parse(value[p]); 

PS: 代わりArrayListList<string>を使用してください。

1

データをラベルに保存することは非常に悪い考えです。配列や倍精度のリストのように、この目的に適したデータ構造を使用してください。データを表示するためにlablesのみを使用してください。

double[] values = new double[N]; 
Label[] lables = new Label[N]; // Only for display! 

// Calculate (just as an example) 
double result = values[i] + values[k]; 

// NOT LIKE THIS! 
double result = Double.Parse(labels[i]) + Double.Parse(labels[k]); 
関連する問題