注册 登录
编程论坛 VB6论坛

文本框change事件触发

huangyz_xy 发布于 2017-02-16 22:52, 9225 次点击
Private Sub K_xj_Change()
If Me.Op_add = True Then
  Me.GMXJ.Text = Val(Me.GMXJ.Text) + Val(Me.K_xj.Text)
  End If
End Sub
这段代码调试了很久始终没有达到我的想法,如果Me.GMXJ.Text的值起始为2383,在Me.K_xj.Text输入1000后变成"1272"(实际减了1+10+100+1000,在Me.K_xj.Text每输入一个字符减了一次),和我最后想要的结果1383少了111,请问各位大虾,有什么办法解决吗?(去掉if语句一样)
5 回复
#2
ZHRXJR2017-02-17 07:34
Change事件就是在控件内容发生变化时产生的事件,你在输入1000的过程中实际控件内容变化了四次,所以结果是变化了1+10+100+1000,一般在做运算时,不建议使用Change事件。
建议使用LostFocus事件,就是在控件失去焦点时发生的事件,如果没有特殊需要,根本不需要判断语句,例如:
程序代码:

Private Sub Form_Load()
Text1.Text = 2383
End Sub
Private Sub Text2_LostFocus()
    Text1.Text = Val(Text1.Text) - Val(Text2.Text)
End Sub

这样只要Text2文本框失去焦点,这个事件发生会进行一次性运算,当然失去焦点可以使用鼠标点击其他控件,也可以按Tba键使其失去焦点。
#3
xiangyue05102017-02-17 08:58
你的这个代码和描述正好相反的。一个加一个减。
正如你自己所说的,Text的change事件是文本发生变化就执行一次。
首先输入1, 这时候就会执行一次 2383-1
然后输入0,变成10 ,再次执行 2383-1-10
……
就代码和结果来说是正确的。如果你中间输错回退重输,那么结果更复杂。
楼上的lostfocus可以,或者干脆做一个执行按钮。
#4
renxiaoyao362017-02-19 17:44
做个回车触发代码就好了,在Text的KeyPress里做。具体怎么做不需要我来说了吧?大致就是把你的代码全部复制到这里面就好
#5
chen35232017-02-20 15:44
之前我也用过change,当输入错误删除再改时,结果就完全与自己想要的不同了,后来如二楼所说用LostFocus事件,自己才满意。
#6
huangyz_xy2017-02-21 10:51
这几天很忙,感谢大家,用的lostfocus,OK了
1