C# 如何防止C中无效输入的崩溃
我做了一个简单的应用程序,把两个数字加在一起,但当我把两个字母加在一起或一个无效符号时,程序就会崩溃。当有人插入一封信时,如何创建一个显示“请输入一个数字”的消息框 这是我的密码:C# 如何防止C中无效输入的崩溃,c#,.net,winforms,error-handling,int,C#,.net,Winforms,Error Handling,Int,我做了一个简单的应用程序,把两个数字加在一起,但当我把两个字母加在一起或一个无效符号时,程序就会崩溃。当有人插入一封信时,如何创建一个显示“请输入一个数字”的消息框 这是我的密码: public partial class frmAdd : Form { string first; string second; public frmAdd() { InitializeComponent(); } private void btnF
public partial class frmAdd : Form
{
string first;
string second;
public frmAdd()
{
InitializeComponent();
}
private void btnFirst_Click(object sender, EventArgs e)
{
first = txtNumber.Text;
}
private void btnSecond_Click(object sender, EventArgs e)
{
second = txtNumber.Text;
}
private void btnResult_Click(object sender, EventArgs e)
{
int a = Convert.ToInt32(first);
int b = Convert.ToInt32(second);
int c = a + b;
txtResult.Text = c.ToString();
}
}
改用:
或者,更好的方法可能是在用户首次输入数据时捕获错误:
public partial class frmAdd : Form
{
int first; // changed to int
int second;
private void btnFirst_Click(object sender, EventArgs e)
{
if (!int.TryParse(txtNumber.Text, out this.first))
{
MessageBox.Show("Invalid Input!");
}
}
private void btnSecond_Click(object sender, EventArgs e)
{
if (!int.TryParse(txtNumber.Text, out this.second))
{
MessageBox.Show("Invalid Input!");
}
}
private void btnResult_Click(object sender, EventArgs e)
{
int c = first + second;
txtResult.Text = c.ToString();
}
}
改用:
或者,更好的方法可能是在用户首次输入数据时捕获错误:
public partial class frmAdd : Form
{
int first; // changed to int
int second;
private void btnFirst_Click(object sender, EventArgs e)
{
if (!int.TryParse(txtNumber.Text, out this.first))
{
MessageBox.Show("Invalid Input!");
}
}
private void btnSecond_Click(object sender, EventArgs e)
{
if (!int.TryParse(txtNumber.Text, out this.second))
{
MessageBox.Show("Invalid Input!");
}
}
private void btnResult_Click(object sender, EventArgs e)
{
int c = first + second;
txtResult.Text = c.ToString();
}
}
您可以使用NumericUpDown控件而不是TextBox-它将不允许用户输入无效数据
或者,您可以在用户输入内容后向文本框值添加验证。将ErrorProvider添加到表单中。并订阅txtNumber文本框的验证事件。当textbox失去焦点时,将发生此事件。如果输入的文本不是整数,则文本框附近将显示错误,并且不会单击您的按钮:
private void txtNumber_Validating(object sender, CancelEventArgs e)
{
int value;
if (!Int32.TryParse(txtNumber.Text, out value))
{
errorProvider1.SetError(txtNumber, "Value is not an integer");
return;
}
errorProvider1.SetError(txtNumber, "");
first = value; // it's better to save integer value than text
}
验证看起来像:
您可以使用NumericUpDown控件而不是TextBox-它将不允许用户输入无效数据
或者,您可以在用户输入内容后向文本框值添加验证。将ErrorProvider添加到表单中。并订阅txtNumber文本框的验证事件。当textbox失去焦点时,将发生此事件。如果输入的文本不是整数,则文本框附近将显示错误,并且不会单击您的按钮:
private void txtNumber_Validating(object sender, CancelEventArgs e)
{
int value;
if (!Int32.TryParse(txtNumber.Text, out value))
{
errorProvider1.SetError(txtNumber, "Value is not an integer");
return;
}
errorProvider1.SetError(txtNumber, "");
first = value; // it's better to save integer value than text
}
验证看起来像:
您可以添加一些验证来检查是否可以从传入的字符串值创建int。 int.TryParse是一种简单的方法 对于MessageBox,您可以使用MessageBox Cals 例如:
private void btnResult_Click(object sender, EventArgs e)
{
int a = 0;
int b = 0;
if (!int.TryParse(first, out a))
{
MessageBox.Show("first is not a number");
return;
}
if (!int.TryParse(second, out b))
{
MessageBox.Show("second is not a number");
return;
}
int c = a + b;
txtResult.Text = c.ToString();
}
您可以添加一些验证来检查是否可以从传入的字符串值创建int。 int.TryParse是一种简单的方法 对于MessageBox,您可以使用MessageBox Cals 例如:
private void btnResult_Click(object sender, EventArgs e)
{
int a = 0;
int b = 0;
if (!int.TryParse(first, out a))
{
MessageBox.Show("first is not a number");
return;
}
if (!int.TryParse(second, out b))
{
MessageBox.Show("second is not a number");
return;
}
int c = a + b;
txtResult.Text = c.ToString();
}
实际上,您可以使用Int32.tryParseString,out int,而不是Convert.ToInt32string,如下所示:
int a, b;
a = Int32.tryParse(first, out a);
b = Int32.tryParse(second, out b);
如果转换失败,tryParse方法将导致零。如果成功,它将为您提供在字符串中找到的数字
希望它对您有所帮助,在我学习C的前几天,我也必须找到这个。您可以使用Int32.tryParseString,out int,而不是使用Convert.ToInt32string,如下所示:
int a, b;
a = Int32.tryParse(first, out a);
b = Int32.tryParse(second, out b);
如果转换失败,tryParse方法将导致零。如果成功,它将为您提供在字符串中找到的数字
希望它能帮到你,我在C的前几天也发现了这一点。NumericUpDown做什么?@user2705420,NumericUpDown只是另一种类型的输入控件,就像文本框一样,但这个控件只允许你输入带或不带小数的数字。“向上”和“向下”按钮来自控件中的“向上”和“向下”按钮。谢谢,您可以看到im的级别非常低,但是.SetError是否创建了一个消息框,或者它是否会显示在消息框中txtNumber@user2705420它将显示错误图标和带有错误消息的工具提示,请参见示例屏幕快照NumericUpDown做什么?@user2705420,NumericUpDown只是另一种类型的输入控件,就像文本框一样,但此控件只允许您键入带或不带小数的数字。“向上”和“向下”按钮来自控件中的“向上”和“向下”按钮。谢谢,您可以看到im的级别非常低,但是.SetError是否创建了一个消息框,或者它是否会显示在消息框中txtNumber@user2705420它将显示错误图标和带有错误消息的工具提示,请参见示例screenshot@user2705420这就是问题所在。它将首先尝试解析,如果成功,则将尝试解析第二个。如果两者都成功,它将执行内容If块;否则,它将执行else块。@user2705420这是命令。它将首先尝试解析,如果成功,则将尝试解析第二个。如果两者都成功,它将执行内容If块;否则它将执行else-block。请尝试此代码尝试此代码