none
VB.Net2005录入文字时出现了丢失字符的现象 RRS feed

  • 问题

  • VB.Net2005录入文字时出现了丢失字符的现象。下面做了一个最简单的测试窗体,用于验证这种现象。
    测试窗体中包含72个TextBox,窗体的KeyPreview属性设置为True,TextBox的MaxLength设置为8。
    期待实现的机能是:当Enter键按下时,自动切换到下一个
    TextBox。
    主要处理是:在窗体的KeyDown事件中判断是否有Enter键入,如果是Enter,则使用SendKeys.Send发送一个TAB键。
    在一般状况下,这种处理没啥问题,但是如果使用条码枪快速扫描条码(一次扫描5个8个字符的条码),就会出现丢失字符的问题。丢失的频率不固定,一般在二三十次丢失一次这样子。而且丢失的一般都是中间的字符。例如扫描的条码为a123456a,在快速扫描
    二三十次后,可以发现某几个TextBox中录入的字符是【a12456a】,【a12345a】等错误的数据
    曾经将
    SendKeys.Send换成【SendKeys.SendWait】、【Me.SelectNextControl(Me.ActiveControl, True, True, True, True)】,现象依旧。将处理换成在事件【KeyUp】、或者重载【ProcessCmdKey】也是现象依旧。

    同时还测试了在同一个控件中,如果没有Enter变换的处理,所有录入的字符都可以正确的接收。

    因此猜测是因为录入过程中,ActiveControl被改变以后,某些按键相关的Window Message被抛弃了。

    请教各位高手有没有办法解决这个问题呢?谢谢了

    测试代码如下:

    Code Snippet

    Public Class Form10

    Private Sub Form10_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.Enter Then
    SendKeys.Send("{TAB}")
    End If
    End Sub

    End Class



    2008年5月12日 1:38

全部回复

  • 没遇到过这种问题,你试着加doevents看看

    2008年5月12日 1:49
    版主
  •  feiyun0112 写:

    没遇到过这种问题,你试着加doevents看看


    试过了,不行的:(

    猜测当在活动控件TextBox1中录入
    【a123456a[ENTER]a123456a[ENTER]】这个数据时
    当窗体接收到[ENTER]按键,将当前活动控件变成了TextBox2,这个时候[ENTER]按键后面已经处于字符缓冲的字符原来设想应该是被TextBox2接收到的,但是现在的情况是某些字符丢失了:(
    2008年5月12日 2:06