仅当文本框不为空时,C#计数器才会增加

时间:2014-02-16 02:20:52

标签: c# windows winforms counter

我正在做一个猜谜游戏的家庭作业。用户试图猜测数字0-100。我是C#的新手,这只是我的第二个窗体。我正在尝试创建一个按钮事件,检查我的文本框是否为空白。如果它不是空白我需要它添加到一个计数器,一旦用户猜出正确的数字,一个窗口应该弹出说“你花了很多次尝试!”。 “这么多”是我的反击......我希望这是有道理的。在某些时候,我还需要确保用户只输入数字。我现在只想弄清楚这个计数器......到目前为止,这是我的代码。有一些代码被注释掉了。我完全迷失了。

public Form1()
{
    InitializeComponent();

    //Generates random number for game
    Random rnd = new Random();
    int rndNumber = rnd.Next(101);
    this.number.Text = rndNumber.ToString();
}

//Makes sure user only enters numbers 0-100
private void guess_TextChanged(object sender, EventArgs e)
{

}

//does this when evaluate button is clicked
private void evaluate_Click(object sender, EventArgs e)
{
    //counter for the number of guesses
    int guessNumber;
    guessNumber = 0;

    if (string.IsNullOrEmpty(this.guess.Text))
    {
        MessageBox.Show("Must enter a number 0-100 to play");

        // while (!string.IsNullOrEmpty(this.guess.Text))
            // {
            // guessNumber++;
            // }
    }
    else
    {
        guessNumber++;
        MessageBox.Show(guessNumber.ToString());
    }            
}

4 个答案:

答案 0 :(得分:1)

您的evaluate_Click方法看起来很好。如果文本框为空,请告诉他们输入值。在else中 - 在递增计数器之前 - 检查它们是否先放入正确的值。如果他们没有输入正确的值 - 增加计数器。

你需要把"计数器"在课堂(表格)级别。如果你把它放在这样的事件中 - 它将有localscope,并且每次调用事件时都会重置为0。声明" guessNumber"在类级别变量并在事件中递增它,你应该全部设置。

答案 1 :(得分:0)

有一个范围在evaluate方法之外的变量。也许高于public Form1()行。这样,它在类的本地范围内定义,而不仅仅是methd,以便所有方法都可以访问它。

启动evaluate方法后,在进一步处理之前立即递增计数器。所以你的代码看起来像是:

private void evaluate_Click(object sender, EventArgs e)
{
    counter++;
    if (!string.isEmptyOrNull(this.guess.text))
    {
         if (rndNumber == Int32.Parse(this.guess.text))
             //Display you are correct
         else
             //Display guess again
    }
}

答案 2 :(得分:0)

试试这个:

public partial class Form1 : Form
{
    int guessNumber;
    int rndNumber;
    int userNumber;
    public Form1()
    {
        InitializeComponent();
        //Generates random number for game
        Random rnd = new Random();
        rndNumber = rnd.Next(101);
        this.number.Text = rndNumber.ToString();

    }


    //does this when evaluate button is clicked        
    private void evaluate_Click(object sender, EventArgs e)
    {
        //counter for the number of guesses



        if (string.IsNullOrWhiteSpace(this.guess.Text))
        {
            MessageBox.Show("Must enter a number 0-100 to play");

            // while (!string.IsNullOrEmpty(this.guess.Text))
            // {
            // guessNumber++;
            // }
        }
        else
        {
            guessNumber++;
            userNumber = Convert.ToInt32(guess.Text);
            if (userNumber == rndNumber)
            {
                MessageBox.Show("you took these many guesses = "+guessNumber.ToString());
            }
            else
            {
                MessageBox.Show("Invalid Guess Try Again!!!");
            }

        }
    }

    //Makes sure user only enters numbers 0-100
    private void guess_TextChanged(object sender, EventArgs e)
    {
        var userInput=Convert.ToInt32(guess.Text);
        if (!(userInput > 0 && userInput <= 100))
        {
            MessageBox.Show("enter number between 1 and 100");
            guess.Text = userInput.ToString().Substring(0, userInput.ToString().Length - 1);
        }
    }
}

答案 3 :(得分:0)

仅对于文本框中的数字,您可以在TextBox KeyPress事件上尝试此代码

private void guess_KeyPress(object sender, EventArgs e)
{
   e.Handled=!(Char.IsDigit(e.KeyChar));
   //This will only allow numeric values in TextBox
}