C#输入字符串错误

时间:2017-07-16 13:08:25

标签: c# winforms syntax

我也尝试输入用户值并在几秒钟内倒数,但每当我输入任何内容并单击开始按钮时,它表示输入字符串格式不正确。我用google搜索和Google搜索,无法弄清楚如何获取用户输入并解析或将其转换为int和倒计时,同时通过计时器更新标签。 我用来控制应用程序仍然围着语法...

using System;
using System.Windows.Forms;

namespace Countdown { 

    public partial class Form1 : Form 
    { 

        int seconds; string user; int test = 30;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void tmrCountdown_Tick(object sender, EventArgs e)
        {
            lblDisplay.Text = test.ToString();

            if (test > 1)
            {
                lblDisplay.Text = test.ToString() + " Seconds Remaining";
            }
            else if (test == 1)
            {
                lblDisplay.Text = test.ToString() + " Second Remaining";
            }
            else
            {

                tmrCountdown.Stop();
            }
            test--;
        }

        public void btnStart_Click(object sender, EventArgs e)
        {
            int test = int.Parse(txtBoxInput.Text);

            tmrCountdown.Start();
        }

        private void txtBoxInput_TextChanged(object sender, EventArgs e)
        {

        }

    }

}

错误发生在" int test = int.Parse(txtBoxInput.Text);"

3 个答案:

答案 0 :(得分:0)

您的代码中存在两个问题。

第一个是您不保护代码免受无效输入的影响。如果您没有在txtBoxInput中键入内容,或者您​​键入的文本无法转换为整数,则会得到无效的字符串格式异常

第二个问题是变量 test 。您在按钮单击中在本地声明它,并且假定您没有得到编译错误,那么您没有设置与您在计时器Tick事件中使用的名称相同的全局类级别变量。

因此,每次需要处理用户输入时都要使用TryParse。如果出现问题,这不会引发异常,只会返回true或false。最后不要在按钮单击内重新声明 int test 变量,而是直接在TryParse的输出中使用全局类级变量

public void btnStart_Click(object sender, EventArgs e)
{
    // Try to convert the input in an integer. If this succeed you have
    // the global variable _test_ set to converted text
    if(!Int32.TryParse(txtBoxInput.Text, out test)
        MessageBox.Show("Invalid input. Please type a number!");
    else
        tmrCountdown.Start();
}

答案 1 :(得分:0)

Parse更改为TryParse并查看无法解析的值:

public void btnStart_Click(object sender, EventArgs e)
{
    if (int.TryParse(txtBoxInput.Text, out test)) 
      // We succeed in parsing, so we continue with the timer
      tmrCountdown.Start();
    else {
      // We failed in parsing

      // Let's put keyboard focus on the problem text box...
      if (txtBoxInput.CanFocus)
        txtBoxInput.Focus();

      // ... and report what's been happened
      MessageBox.Show($"'{txtBoxInput.Text}' is not a valid integer value", 
                      Application.ProductName, 
                      MessageBoxButtons.OK, 
                      MessageBoxIcon.Warning);     
    }
}

答案 2 :(得分:0)

在按钮处尝试此代码

int test=Convert.ToInt32(txtBoxInput.Text);
tmrCountdown.Interval = test*1000; //have to multiply to 1000 since timer interval value is in milliseconds.
tmrCountdown.Start();

只需将整数放在文本框中