本帖最后由 moke520 于 2010-03-08 15:12:57 编辑

解决方案 »

  1.   

    Text1.Text = String(6, KeyAscii) 我以为这一句是要把 text 清空重写的.
    为什么这里不是呢?
      

  2.   

    KeyPress不检测键盘的物理状态,只是传递字符, 所以会出现1楼说的情况, 放入KeyUp事件中去处理...
      

  3.   

    要过滤掉那个key的话加一句
      KeyAscii = 0Private Sub Text1_KeyPress(KeyAscii As Integer)
      Cls
      Dim char As String
      char = Chr(KeyAscii)
      KeyAscii = Asc(UCase(char))
      Text1.Text = String(6, KeyAscii)
      KeyAscii = 0
    End Sub
      

  4.   

    最后加一句:KeyAscii = 0
      

  5.   

    Text1.Text = String(6, KeyAscii) 这句确实是重新赋值,Text1的内容也确实是6个A。但是,此时
    Text1_KeyPress事件尚未完成,也就是说,Text1_KeyPress所产生的一个A在这时候还没写入Text1中。这就导致了6+1=7
    具体验证如下,添加代码:Private Sub Text1_Change()
        Debug.Print Len(Text1.Text)
    End Sub
      

  6.   


    Private Sub Text1_KeyPress(KeyAscii As Integer)
        KeyAscii = Asc(UCase(Chr(KeyAscii)))
        Text1.Text = String(6, Chr(KeyAscii))
        KeyAscii = 0
    End Sub
      

  7.   


    这一句确实是清空了的啊,但由于你没过滤掉KeyAscii的效果,在这个语句号还是录入了一个字符啊.而且你注意一下,你每按一个键时,出现的那7个字符串,你的插入符都是停在"第1个之后",这就是你在后面输入的那个字符.你把我在4楼说的代码中最后一句改成这个就很明显了
      KeyAscii = vbKeyA
      

  8.   

    [Quote=引用 4 楼 bcrun 的回复:]
    要过滤掉那个key的话加一句
      KeyAscii = 0
                - - 
    不是想达到什么目的 - - 
    我就是不理解为什么这样了
      

  9.   

    加过程
    Private Sub Text1_Change()
        Debug.Print Len(Text1.Text)
    End Sub和加一句
    KeyAscii = vbKeyA 
    效果一样了    - -
    按什么都出一个 A
      

  10.   

    我只是想告诉你 按一下A,Text1_Change事件其实是触发了2次,第一次发生在Text1.Text = String(6, KeyAscii)之后,第二次发生在整个KeyPress结束之后。这是产生7个字符的原因
      

  11.   

    因为你写在Text1_KeyPress事件中,此时text1是有焦点的,Text1_KeyPress是传递KeyAscii,事件完成时KeyAscii<>0,所以会写入有焦点的text1中....最后加上KeyAscii=0,相当于清除了KeyAscii,结果就不了,你可以再加一个text控件,测试代码:Private Sub Text1_KeyPress(KeyAscii As Integer)
        KeyAscii = Asc(UCase(Chr(KeyAscii)))
        Text2.Text = String(6, KeyAscii)
        'KeyAscii = 0
    End Sub另一种解决方法可以写在Text1_KeyUp事件中,它会在键盘完全还原时再处理text1=....,结果就不一样了
      

  12.   


    Private Sub Text1_Change()
       Debug.Print Text1.Text
    End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)
      Cls
      Dim char As String
      char = Chr(KeyAscii)
      KeyAscii = Asc(UCase(char))
      Text1.Text = String(6, KeyAscii - 1)
    End Sub
    看看这个,它表示change事是怎么执行的。