2012-11-05 27 views
2

我正在試圖用一個計時器來創建一個數學遊戲,該計時器可以計算特定時間內的正確問題的數量。如果答案正確,現在我試圖增加每個按鈕點擊的int值。每個按鈕單擊增加數C#Desktop

但只遞增一次,有時不遞增:

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(); 
    } 
} 

回答

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++; 
     } 
    } 
} 
2

您需要int correct聲明移到class scope。否則,每次點擊都會以新變量開始。

2

int correct = 0;在功能範圍內。將它作爲類字段移到該函數之外。這樣它將保持其價值,而不是在每次點擊期間重置爲0

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開始計數的,而且永遠無法得到原始值。 現在,保存數據的變量在函數之外,並在窗體加載時進行初始化。

0

每次單擊該按鈕時,correct正在復位爲零。 嘗試在方法外聲明correct

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(); 

    }