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