2

特定の時間内に正しい質問の数を計算するタイマーを使用して数学ゲームを作成しようとしています。int答えが正しければ、ボタンのクリックごとに値を増やしようとしています。

しかし、それは一度だけ増加し、時には増加しません:

private void button1_Click(object sender, EventArgs e)
{
    int x = Randomnumber.Next(12);
    int z = Randomnumber.Next(12);
    int s = x * z;
    int correct = 0;
    //int cv = +correct;
    textBox2.Text = x.ToString();
    textBox3.Text = z.ToString();
    if (s == Convert.ToInt32(textBox4.Text))
    {
        correct += 1;
        numbercorrect.Text = correct.ToString();
    }
}
4

6 に答える 6

2

メインフォーム(フォームを使用していると仮定しています)はクラスです。

私が提案するのは、フォームクラスのメンバーとして変数を宣言し、それを使用して正しい応答の数を保持することです。

私は次のようなものを想像します。

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int correct;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //insert logic here
            correct++;
        }
    }
}  
于 2012-11-05T22:27:50.400 に答える
2

int correct宣言をクラススコープに移動する必要があります。それ以外の場合は、クリックするたびに、新しい変数から開始します。

于 2012-11-05T22:28:05.563 に答える
2

int correct = 0;関数内でスコープされます。クラスフィールドとして関数の外に移動します。そうすれば0、クリックするたびにリセットされるのではなく、その値が保持されます。

于 2012-11-05T22:28:24.330 に答える
1

これを試して:

private int correct = 0;
private void button1_Click(object sender, EventArgs e)
{
    int x = Randomnumber.Next(12);
    int z = Randomnumber.Next(12);
    int s = x * z;
    //int cv = +correct;
    textBox2.Text = x.ToString();
    textBox3.Text = z.ToString();
    if (s == Convert.ToInt32(textBox4.Text))
    {
        correct ++;
        numbercorrect.Text = correct.ToString();
    }

カウントは常に0から開始し、元の値を取得することはありません。これで、データを保持する変数は関数の外にあり、フォームが読み込まれるときに初期化されます。

于 2012-11-05T22:30:08.370 に答える
0

ボタンがクリックcorrectされるたびに、ゼロにリセットされ始めています。correctメソッドの外で宣言してみてください。

于 2012-11-05T22:30:41.100 に答える
0

以下のコードを見てみてください:

int correct = 0;
tryParse(numbercorrect.Text, out correct);

したがって、コードは次のようにする必要があります。

private void button1_Click(object sender, EventArgs e)
{
    int x = Randomnumber.Next(12);
    int z = Randomnumber.Next(12);
    int s = x * z;
    int correct = 0;
    int.tryParse(numbercorrect.Text, out correct);
    //int cv = +correct;
    textBox2.Text = x.ToString();
    textBox3.Text = z.ToString();
    if (s == Convert.ToInt32(textBox4.Text))
    {
        correct += 1;
        numbercorrect.Text = correct.ToString();

    }
于 2012-11-05T22:31:00.897 に答える