C# 尝试捕获不显示formatException的错误消息

C# 尝试捕获不显示formatException的错误消息,c#,exception-handling,C#,Exception Handling,我试图从文本框中捕获FormatException。例如-如果用户在“名称”文本框字段中输入数字或任何其他字符。消息将弹出-出现问题。我对C#相当陌生,不理解异常的概念。下面的代码不起作用。无效格式的正确异常是什么 private void button1_Click(object sender, EventArgs e) { try { string name = textBox1.Text; int age = int.Parse(textBox2.Text); } cat

我试图从文本框中捕获
FormatException
。例如-如果用户在“名称”文本框字段中输入数字或任何其他字符。消息将弹出-出现问题。我对C#相当陌生,不理解异常的概念。下面的代码不起作用。无效格式的正确异常是什么

private void button1_Click(object sender, EventArgs e)
{
try
{
    string name = textBox1.Text;
    int age = int.Parse(textBox2.Text);

}
catch (FormatException )
{
    MessageBox.Show("Something went wrong");
}
在Catch中使用ex作为变量

更新(根据评论)


如果需要检查名称文本框中的数字,则:

try {
        string name = textBox1.Text;
        Regex regex = new Regex("[0-9]");
        if (regex.IsMatch(name)) {
            throws new FormatException();
        }
        int age = int.Parse(textBox2.Text);
        MessageBox.Show("How are you today?");
    }
    catch (FormatException) {
       MessageBox.Show("Something went wrong");
    }
您还应该为每种情况显示更具体的消息。

更新

你真正应该做的是:

var regex = new Regex("[0-9]");
if (regex.IsMatch(textBox1.Text)) {
    MessageBox.Show("There was a number inside name textbox.","Error in name field!");
    return;
}
try {
    Convert.ToInt32(textBox2.Text);
} catch (Exception) {
    MessageBox.Show("The input in age field was not valid","Error in name field!");
    return;
}

尝试此操作以显示消息

试试看
{
double mydoubleParam=0;
//假设textBox1.Text是名称测试框
if(double.TryParse(textBox1.Text,out mydoubleParam))
{
新异常(“名称字段中的数值”);
}
int age=int.Parse(textBox2.Text);//假定数字文本框
MessageBox.Show(“你今天好吗?”);
}
捕获(格式化异常)
{
MessageBox.Show(“出了问题”);
}

您可以在TextChanged事件中处理它,如下所示:

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int a;
            bool isNumeric = int.TryParse(textBox1.Text, out a);
            if (isNumeric)
            {
                MessageBox.Show("Something went wrong");
            }
        }

您在
textBox1
textBox2
中输入的值是多少?您希望在MessageBox中看到什么消息?单击按钮时会调用Try catch。我正在文本框1中输入名称,它必须是字符串格式,否则我想显示消息框说“出现了问题”。您没有对
textBox1.text进行任何验证。这就是为什么你没有得到错误。如果希望用户只输入字符串值(而不是数字),则可以通过多种方式实现。请举例说明。描述您在两个文本框中输入的内容。告诉我们你的预期结果和实际结果。我要求这样做是因为不清楚你想要发生什么。如果非要我猜的话,在这一点上,你似乎想禁止某人在“姓名”文本框中输入数字。是这样吗?你知道吗,如果你给int.Parse传递一个空字符串,它会抛出一个异常?当您单击按钮时,您的textBox2很可能是空的,这就是发生异常的原因-因为textBox2.Text是空的。是否可以仅在双引号内显示消息?要求:“例如,如果用户在名称文本框字段内输入数字。消息将弹出-出现错误。”将
ex
传递到处理程序与该问题有什么关系?要求:“例如,如果用户在名称文本框字段中输入数字,则会弹出消息-出现问题。”@Amit-我怀疑OP错误地键入了要求。我很确定他的意思是相反的。你的正则表达式坏了,抛出
FormatException
没有什么意义,因为
int.Parse
无论如何都会这样做。您发布的代码不正确,只会增加膨胀。@Enigmativity在评论部分也确认了这一点。“Try catch在单击按钮时被调用。我正在文本框1中输入名称,该文本框必须是字符串格式,否则我想显示消息框说“出了问题”" .. 但是我没有否决这个答案,而是希望修改它以满足正确的要求。@Amit-我已经要求OP确认。即使我怀疑它是否完美,这个答案有意义+1-只需添加代码以避免所有其他非字母字符,并确保在验证后不会将它们追加到textBox的文本字符串中。如果textBox1的值为“Am123t”,该怎么办。。它有效吗?如果没有,则代码工作不正常。
var regex = new Regex("[0-9]");
if (regex.IsMatch(textBox1.Text)) {
    MessageBox.Show("There was a number inside name textbox.","Error in name field!");
    return;
}
try {
    Convert.ToInt32(textBox2.Text);
} catch (Exception) {
    MessageBox.Show("The input in age field was not valid","Error in name field!");
    return;
}
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int a;
            bool isNumeric = int.TryParse(textBox1.Text, out a);
            if (isNumeric)
            {
                MessageBox.Show("Something went wrong");
            }
        }