我用过textbox的keyup事件,但有个缺点,将焦点移到另一个文本框,按了键盘Ctrl键或其他键,它以当前文本框的值又重新计算原来的文本框。
就好比下图,如用keyup事件,在“千米/公里”中输入0.6,但按Tab键将焦点移到其他文本框,由于浮点数精度问题,原来的文本框可能变为0.599998。但我希望按Tab键,这些文本框的数字不再改变。只有改变数字时才重新计算。
图片传不上去,详见百度应用(帮帮单位换算):http://www.baidu.com/s?wd=%E5%8D%95%E4%BD%8D%E6%8D%A2%E7%AE%97&tn=ichuner_1_dg&ie=utf-8
8 个解决方案
#1
那为什么不用TextChanged事件?
#2
使用动态数据绑定。
#3
我试过了,好像不可以。
因为一个文本框的数据改变,另一个文本框的数据也在变,那么这个文本框也同时触发TextChange事件,这样计算肯定会冲突。主要是所有的文本框都是相互关联计算的。
#4
用TextChanged事件
非要用KeyUp,需要判断下Key如果不是字母、删除等改变文本的键,就不要重新计算
非要用KeyUp,需要判断下Key如果不是字母、删除等改变文本的键,就不要重新计算
#5
用TextChanged事件会不会冲突啊,主要是所有的文本框都是相互关联计算的。
比如下面,就不是我想要的。
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
TextBox2.Text = TextBox1.Text * 3
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
TextBox1.Text = TextBox2.Text / 5
End Sub
#6
怎么使用,我没这方面基础
#7
textChanged可以实现
你只要在执行运算前,判断一下当前文本框是不是有输入焦点就行
你只要在执行运算前,判断一下当前文本框是不是有输入焦点就行
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.Focused Then
TextBox2.Text = TextBox1.Text * 3
End If
End Sub
Private Sub TextBox2_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox2.TextChanged
If TextBox2.Focused Then
TextBox1.Text = TextBox1.Text / 3
End If
End Sub
#8
嗯。确实是这样
#1
那为什么不用TextChanged事件?
#2
使用动态数据绑定。
#3
我试过了,好像不可以。
因为一个文本框的数据改变,另一个文本框的数据也在变,那么这个文本框也同时触发TextChange事件,这样计算肯定会冲突。主要是所有的文本框都是相互关联计算的。
#4
用TextChanged事件
非要用KeyUp,需要判断下Key如果不是字母、删除等改变文本的键,就不要重新计算
非要用KeyUp,需要判断下Key如果不是字母、删除等改变文本的键,就不要重新计算
#5
用TextChanged事件会不会冲突啊,主要是所有的文本框都是相互关联计算的。
比如下面,就不是我想要的。
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
TextBox2.Text = TextBox1.Text * 3
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
TextBox1.Text = TextBox2.Text / 5
End Sub
#6
怎么使用,我没这方面基础
#7
textChanged可以实现
你只要在执行运算前,判断一下当前文本框是不是有输入焦点就行
你只要在执行运算前,判断一下当前文本框是不是有输入焦点就行
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.Focused Then
TextBox2.Text = TextBox1.Text * 3
End If
End Sub
Private Sub TextBox2_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox2.TextChanged
If TextBox2.Focused Then
TextBox1.Text = TextBox1.Text / 3
End If
End Sub
#8
嗯。确实是这样