我做了一个简单的应用程序,将2个数字加在一起但是当我将两个字母加在一起或无效符号时,它会使程序崩溃。当有人插入信件时,如何创建一个显示“请输入数字”的消息框
这是我的代码:
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();
}
}
答案 0 :(得分:2)
改为使用TryParse
:
private void btnResult_Click(object sender, EventArgs e)
{
int a, b;
if (int.TryParse(first, out a) && int.TryParse(second, out b))
{
int c = a + b;
txtResult.Text = c.ToString();
}
else
{
MessageBox.Show("Invalid Input!");
}
}
或许更好的方法是在用户首次输入数据时捕获错误:
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();
}
}
答案 1 :(得分:2)
您可以使用NumericUpDown
控件而不是TextBox
- 它不允许用户输入无效数据。
或者您可以在用户输入内容后向TextBox
值添加验证。将ErrorProvider
添加到您的表单中。并订阅Validating
文本框txtNumber
事件。当文本框失去焦点时,将发生此事件。如果输入的文本不是整数,则会在texbox附近显示错误,并且不会点击您的按钮:
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
}
验证如下:
答案 2 :(得分:0)
您可以添加一些验证,以检查是否可以从传入的int
值创建string
。
int.TryParse
是一种简单的方法。
对于MessageBox
,您可以使用MessageBox
calss
示例:
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();
}
答案 3 :(得分:0)
您可能实际使用Int32.tryParse(String,out int),而不是使用Convert.ToInt32(string),如下所示:
int a, b;
a = Int32.tryParse(first, out a);
b = Int32.tryParse(second, out b);
如果转换失败,则tryParse方法将导致零。如果成功,它将为您提供在字符串中找到的数字。
希望它能帮助你,在C#的前几天也必须找到它。