我也尝试输入用户值并在几秒钟内倒数,但每当我输入任何内容并单击开始按钮时,它表示输入字符串格式不正确。我用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);"
答案 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();
只需将整数放在文本框中