C#转换抛出异常

时间:2015-08-31 11:31:19

标签: c# visual-studio

所以,我在C#工作,由于某种原因,我的转换是抛出异常,代码是在用户按下按钮时执行的,这是代码。

private void tbVerk6Breidd_KeyDown(object sender, KeyEventArgs e)
{
    int width = Convert.ToInt32(tbTextBox.Text); //Crashes here
}

任何帮助表示赞赏:)

修改

Heki提到KeyUp是一个更好的主意,有效。谢谢:))

private void tbVerk6Breidd_KeyUp(object sender, KeyEventArgs e)
{
    int width = Convert.ToInt32(tbTextBox.Text);
}

4 个答案:

答案 0 :(得分:3)

如果您不知道文本框是否已填充或不包含数值,请尝试:

private void tbVerk6Breidd_KeyDown(object sender, KeyEventArgs e)
{
    int width;
    int.TryParse(tbTextBox.Text, out width )

}

如果文本输入不是可转换整数,则将检索0

答案 1 :(得分:1)

  

Convert.ToInt32(tbTextBox.Text)可以抛出两种类型的异常。

1. FormatException // let say tbTextBox.Text = "abcdefghijkl";
2. OverflowException // let say tbTextBox.Text = "12345890690123456789012345997890";

请检查 tbTextBox.Text 中的参数。

解决方案:如上所述,使用' TryParse' int的方法。

进一步阅读: - https://unwrapdotnet.wordpress.com/2014/01/14/all-about-int32-parse-convert-toint32-int32-tryparse/

答案 2 :(得分:1)

Convert.ToInt32方法抛出了两个可能的例外:

FormatException

  

值不包含可选符号后跟一系列数字(0到9)。

OverflowException

  

值表示小于Int32.MinValue或大于Int32.MaxValue的数字。

我猜你得到FormatException因为文本框中的string不代表有效的int

在你的问题中,你写了...the code is meant to execute when user presses a button, here is the code.。但您的事件处理程序是否已注册KeyDown事件?如果要检查文本框中的文本何时更改(无论是通过复制粘贴还是键盘交互),我建议使用文本框的TextChanged事件。

    private void tbVerk6Breidd_TextChanged(object sender, EventArgs e)
    {
        int parsed;
        if (int.TryParse(tbTextBox.Text, out parsed))
        {
            // parsed successfully
        }
        else
        {
            // invalid value
        }
    }

答案 3 :(得分:0)

try
{
   int width = int.Parse( tbTextBox.Text);     
   // do what you want to do
}
catch
{
   // do nothing, log?, display an error message ( that would probably be annoying )
}

您可能还想使用数字向上控制。

https://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown(v=vs.110).aspx

我不知道您是否要区分实际输入的用户" 0",这是一个有效的输入,以及他们输入无效数据的情况,如" abasr4ra&# 34。