NumericUpDown值变更时与TextBox求和总是差1的技术咨询
解决NumericUpDown ValueChanged事件求和结果总是差1的问题
嘿,这个问题我之前也踩过坑!根源在于你代码里误用了numericUpDown1.Text来获取数值,这可是个容易忽略的时机问题。
当你点击NumericUpDown的上下按钮时,ValueChanged事件的触发时机要早于控件的Text属性更新——也就是说,事件执行的时候,Text还是上一次的旧值,自然求和结果就总是和预期差1了。
先看看你原来的代码:
private void numericUpDown1_ValueChanged(object sender, EventArgs e) { try { textBox2.Text = Convert.ToString(Convert.ToInt32(textBox1.Text.Trim()) + Convert.ToInt32(numericUpDown1.Text.Trim())); } catch (Exception) { } }
解决办法很简单,直接用NumericUpDown的Value属性就好!这个属性是实时同步当前数值的,而且本身就是数值类型,不用来回做字符串转换,还能避免很多潜在的格式问题。修复后的代码如下:
private void numericUpDown1_ValueChanged(object sender, EventArgs e) { try { // 解析textBox1的输入值 int textBoxInput = int.Parse(textBox1.Text.Trim()); // 直接取NumericUpDown的当前值(转int是因为默认Value是decimal类型) int upDownCurrentValue = (int)numericUpDown1.Value; // 计算后赋值给textBox2 textBox2.Text = (textBoxInput + upDownCurrentValue).ToString(); } catch (FormatException) { // 给用户友好的输入错误提示 textBox2.Text = "请输入有效数字哦"; } }
另外再给你两个小建议:
- 别捕获笼统的
Exception,尽量捕获具体的异常类型(比如这里的FormatException),不然容易隐藏其他未知错误,不利于排查问题 - 如果你的NumericUpDown允许的数值范围超出int的取值范围,可以考虑用
decimal类型来计算,避免溢出问题
内容的提问来源于stack exchange,提问作者garlic bread
相关产品推荐
相关产品推荐

