-2

label13 つのラベル ( 、label2label4) を持つ数値を生成する機能を備えた win-form を作成しましたtextbox。これはストレージであり、ボタンが押されるたびにその値を検証します。私の問題は、私がlabel4正しく答えたときに、それ自体の値が上がらなかったことです。このコードで

int num = 0;
string temp;
        if (textBox1.Text == ans.ToString())
        {
            num++;
            temp = "Correct Answers " + num;


            int a = rr.Next(4), b = rr.Next(4);
            ans = a + b;
            label1.Text = a.ToString();
            label2.Text = b.ToString();          

            label4.Text = temp;
            textBox1.Focus();
            textBox1.SelectAll();

        }
4

2 に答える 2

4

label4それ自体の値を決して増加させないか、それとも最初よりも増加させないか? これらの 2 つのオプションの後者はまさにあなたがやっていることだからです。ロジックのステップを見てください。

int num = 0;
string temp;
//...
num++;
temp = "Correct Answers " + num;
//...
label4.Text = temp;

何回正解しても、表示label4されるのは次のとおりです。

"Correct Answers 1"

常にに初期化numするため、0にインクリメントして1表示します。合計で何回の回答が与えられたかをどこで追跡していますか?

それを追跡するには、より高いスコープに整数値が必要です。配置する場所は、オブジェクトの寿命によって異なります。たとえば、このロジックが存在するオブジェクトが複数の回答にわたって持続する場合 (つまり、同じインスタンスが常にメモリ内にあり、破棄も再作成もされない場合)、クラス レベルのメンバーを追加してその値を保持できます。 . このようなもの:

private int TotalCorrectAnswers { get; set; }

次に、コードは毎回新しい値をインスタンス化する代わりに、その値を使用します。

string temp;
//...
TotalCorrectAnswers++;
temp = "Correct Answers " + TotalCorrectAnswers;
//...
label4.Text = temp;

その他のオプションには、静的フィールドに値を格納してオブジェクトのライフサイクル全体で保持する、データベースをアプリケーションのライフサイクル全体で保持するなどがあります。これは、アプリケーションの構造によって異なります。

于 2013-07-15T17:32:30.517 に答える
2

では、数学の問題に答えを出すとき、正解数を示す Label4 の最高値は 1 でしょうか? クリック イベント ハンドラー内で変数 num を定義するのは偶然ではありませんか? この場合、正解を得るたびに num が 0 から 1 に増加し、不正解の場合は変化が見られませんが、次の正解は再び 0 から 1 に増加します。

于 2013-07-15T17:31:21.037 に答える