BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2428同步于 2010/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

对TextBox的TextChanged事件无语了

HectorInsanE
2010/10/24镜像同步10 回复
搞了一下午,无解了上来求助…… 输入一个汉字的时候,TextChanged会被引发两次,因此会调用两次处理函数。 有遇到过这问题的吗,求解决思路。 PS.两次处理函数内监视TextBox的Text属性都是完整的汉字。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
snoopyboy机器人#1 · 2010/10/24
英文的时候是一次触发么?是web还是form? 【 在 HectorInsanE (EJ|BYR-Enjoy|GC|TIC029|鲨鱼帮极光鲨) 的大作中提到: 】 : 搞了一下午,无解了上来求助…… : 输入一个汉字的时候,TextChanged会被引发两次,因此会调用两次处理函数。 : 有遇到过这问题的吗,求解决思路。 : ...................
HectorInsanE机器人#2 · 2010/10/24
【 在 snoopyboy 的大作中提到: 】 : 英文的时候是一次触发么?是web还是form? form. 英文数字等等的时候是一次触发 用个输入法输进去的时候,输N个汉字触发2N次…… 但是敲backspace的时候汉字和数字都只触发一次,粘贴一长串汉字的时候也只是触发一次。我在想是不是和输入法更新汉字到目标窗体的方式有关系。
snoopyboy机器人#3 · 2010/10/24
你用的什么输入法?我用的google输入法,没有这个现象啊?你换个输入法试试 【 在 HectorInsanE (EJ|BYR-Enjoy|GC|TIC029|鲨鱼帮极光鲨) 的大作中提到: 】 : form. 英文数字等等的时候是一次触发 : 用个输入法输进去的时候,输N个汉字触发2N次…… : 但是敲backspace的时候汉字和数字都只触发一次,粘贴一长串汉字的时候也只是触发一次。我在想是不是和输入法更新汉字到目标窗体的方式有关系。 : ...................
xnonx机器人#4 · 2010/10/24
发一次0x2111消息触发一次OnTextChanged事件 也许你用的输入法没事就发消息吧
HectorInsanE机器人#5 · 2010/10/24
【 在 snoopyboy 的大作中提到: 】 : : 你用的什么输入法?我用的google输入法,没有这个现象啊?你换个输入法试试 特意下了个谷歌输入法~结果一样 板斧和LS可以用我下面那个工程测试一下 附件(46.5KB) TextChanged.rar
ahomer机器人#6 · 2010/10/25
这个应该跟字符解析有关,每个汉字毕竟等于2个byte,输入一个汉字,其实可以相当于2个字母。 测试了下发现,打开Google中文输入法,输入一个字母,按enter,形式上往textbox输入一个字母,也会触发两次TextChanged。 中文输入法,不管汉字还是字符,估计是用Unicode 或者utf-8编码,一个汉字产生多个字符导致多次触发textbox textchanged。 lz要实现什么? 可以想想其他方法
HectorInsanE机器人#7 · 2010/10/26
【 在 ahomer 的大作中提到: 】 : 这个应该跟字符解析有关,每个汉字毕竟等于2个byte,输入一个汉字,其实可以相当于2个字母。 : 测试了下发现,打开Google中文输入法,输入一个字母,按enter,形式上往textbox输入一个字母,也会触发两次TextChanged。 : 中文输入法,不管汉字还是字符,估计是用Unicode 或者utf-8编码,一个汉字产生多个字符导致多次触发textbox textchanged。 : ................... 需求比较特殊:有排列在同一行的N个TextBox,每一个TextBox都只能放一个汉字或字母。为了更好的体验,希望用户在输入一个词组的时候,TextBox[a]可以自动将首字后面的字更新到TextBox[b],TextBox[c].... 现在方式是,检查最后一个字是不是数字或字符,然后做个奇偶计数,偶的话就把这个汉字从A中删了,加到B去。
duvet机器人#8 · 2010/10/26
你是用TextChanged被调用几次来算里面有多少个字符么?为何不用TextBox.Text.Length? 某实现方法: Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim c As Char() = TextBox1.Text.ToCharArray() Dim i As Integer = 0 Dim en As IEnumerator = Me.Controls.GetEnumerator() While en.MoveNext() If i < c.Length Then en.Current.Text = c(i) End If i += 1 End While Timer1.Stop() End Sub 【 在 HectorInsanE 的大作中提到: 】 : 需求比较特殊:有排列在同一行的N个TextBox,每一个TextBox都只能放一个汉字或字母。为了更好的体验,希望用户在输入一个词组的时候,TextBox[a]可以自动将首字后面的字更新到TextBox[b],TextBox[c].... : 现在方式是,检查最后一个字是不是数字或字符,然后做个奇偶计数,偶的话就把这个汉字从A中删了,加到B去。
HectorInsanE机器人#9 · 2010/10/26
【 在 duvet 的大作中提到: 】 : 你是用TextChanged被调用几次来算里面有多少个字符么?为何不用TextBox.Text.Length? : 某实现方法: : Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged : ................... 其实我不是很会.net 不过大概看懂了~ 主贴提到了相当恶心的一点,上同一个字,两次Change触发时的Text是一样的~因此所有的属性都…… PS 请问这个计时器是用来干嘛的?