返回信息流搞了一下午,无解了上来求助……
输入一个汉字的时候,TextChanged会被引发两次,因此会调用两次处理函数。
有遇到过这问题的吗,求解决思路。
PS.两次处理函数内监视TextBox的Text属性都是完整的汉字。
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2428同步于 2010/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
对TextBox的TextChanged事件无语了
HectorInsanE
2010/10/24镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
英文的时候是一次触发么?是web还是form?
【 在 HectorInsanE (EJ|BYR-Enjoy|GC|TIC029|鲨鱼帮极光鲨) 的大作中提到: 】
: 搞了一下午,无解了上来求助……
: 输入一个汉字的时候,TextChanged会被引发两次,因此会调用两次处理函数。
: 有遇到过这问题的吗,求解决思路。
: ...................
【 在 snoopyboy 的大作中提到: 】
: 英文的时候是一次触发么?是web还是form?
form. 英文数字等等的时候是一次触发
用个输入法输进去的时候,输N个汉字触发2N次……
但是敲backspace的时候汉字和数字都只触发一次,粘贴一长串汉字的时候也只是触发一次。我在想是不是和输入法更新汉字到目标窗体的方式有关系。
你用的什么输入法?我用的google输入法,没有这个现象啊?你换个输入法试试
【 在 HectorInsanE (EJ|BYR-Enjoy|GC|TIC029|鲨鱼帮极光鲨) 的大作中提到: 】
: form. 英文数字等等的时候是一次触发
: 用个输入法输进去的时候,输N个汉字触发2N次……
: 但是敲backspace的时候汉字和数字都只触发一次,粘贴一长串汉字的时候也只是触发一次。我在想是不是和输入法更新汉字到目标窗体的方式有关系。
: ...................
【 在 snoopyboy 的大作中提到: 】
:
: 你用的什么输入法?我用的google输入法,没有这个现象啊?你换个输入法试试
特意下了个谷歌输入法~结果一样 板斧和LS可以用我下面那个工程测试一下
附件(46.5KB) TextChanged.rar
这个应该跟字符解析有关,每个汉字毕竟等于2个byte,输入一个汉字,其实可以相当于2个字母。
测试了下发现,打开Google中文输入法,输入一个字母,按enter,形式上往textbox输入一个字母,也会触发两次TextChanged。
中文输入法,不管汉字还是字符,估计是用Unicode 或者utf-8编码,一个汉字产生多个字符导致多次触发textbox textchanged。
lz要实现什么? 可以想想其他方法
【 在 ahomer 的大作中提到: 】
: 这个应该跟字符解析有关,每个汉字毕竟等于2个byte,输入一个汉字,其实可以相当于2个字母。
: 测试了下发现,打开Google中文输入法,输入一个字母,按enter,形式上往textbox输入一个字母,也会触发两次TextChanged。
: 中文输入法,不管汉字还是字符,估计是用Unicode 或者utf-8编码,一个汉字产生多个字符导致多次触发textbox textchanged。
: ...................
需求比较特殊:有排列在同一行的N个TextBox,每一个TextBox都只能放一个汉字或字母。为了更好的体验,希望用户在输入一个词组的时候,TextBox[a]可以自动将首字后面的字更新到TextBox[b],TextBox[c]....
现在方式是,检查最后一个字是不是数字或字符,然后做个奇偶计数,偶的话就把这个汉字从A中删了,加到B去。
你是用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去。
【 在 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 请问这个计时器是用来干嘛的?