C#转换引发异常

本文关键字:异常 转换 | 更新日期: 2023-09-27 18:10:27

所以,我在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);
}

C#转换引发异常

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

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

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

转换。ToInt32(tbTextBox.Text(可以引发两种类型的异常。

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

请检查tbTextBox中的参数。文本

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

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

Convert.ToInt32方法抛出两个可能的异常:

FormatException

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

OverflowException

value表示小于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
        }
    }
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"(这是一个有效的输入(和他们输入的无效数据(如"baser4ra"(。

相关文章: