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);
}
如果您不知道文本框是否已填充或不包含数值,请尝试:
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"(。