none
TextBox,RichTextBox RRS feed

  • 问题

  • TextBox里显示的代码为什么在RichTextBox里不显示。
    比如:
     Public imu As Boolean
        Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
            Dim Kc As Integer = AscW(e.KeyChar)
            If Kc = 11 Then imu = Not imu : Exit Sub
            If imu Then Exit Sub
            Select Case Kc
                Case 47 : Kc = 1574
                Case 63 : Kc = 1567
                Case 44 : Kc = 1548
                Case 109, 77 : Kc = 1605
                Case 110, 78 : Kc = 1606
                Case 98, 66 : Kc = 1576
                Case 118, 86 : Kc = 1736
                Case 99, 67 : Kc = 1594
                Case 120, 88 : Kc = 1588
                Case 122, 90 : Kc = 1586
                Case 97, 65 : Kc = 1726
                Case 115, 83 : Kc = 1587
                Case 100 : Kc = 1583
                Case 68 : Kc = 1688
                Case 102 : Kc = 1575
                Case 70 : Kc = 1601
                Case 103 : Kc = 1749
                Case 71 : Kc = 1711
                Case 104 : Kc = 1609
                Case 72 : Kc = 1582
                Case 106 : Kc = 1602
                Case 74 : Kc = 1580
                Case 107 : Kc = 1603
                Case 75 : Kc = 1734
                Case 108, 76 : Kc = 1604
                Case 59 : Kc = 1563
                Case 113, 81 : Kc = 1670
                Case 119, 87 : Kc = 1739
                Case 101, 69 : Kc = 1744
                Case 114, 82 : Kc = 1585
                Case 116, 84 : Kc = 1578
                Case 121, 89 : Kc = 1610
                Case 117, 85 : Kc = 1735
                Case 105, 73 : Kc = 1709
                Case 111, 79 : Kc = 1608
                Case 112, 80 : Kc = 1662
                Case Else : Kc = 0
            End Select
            If Kc <> 0 Then e.KeyChar = ChrW(Kc)
        End Sub
    这是Textbox上运行时100%正常,但是同样一个keypress事件,为什么Textbox上显示的,richtextbox或者其他文本框上运行就不行。大家帮个忙。。。谢谢。。。
    muradil
    2009年5月9日 12:50

答案

全部回复

  • 难道没人会啊。。。我知道你们会。。。大家帮个忙。。。这是输入的文字换成ascii码然后换成阿拉伯字符的代码。。。在textbox里面正常运行,但是richtextbox之类的文本框就不能了。。。这个怎么解决啊。。。


    muradil
    2009年5月10日 10:36
  • 应该是Handles RichTextBox1.KeyPress

    为什么Handles Me.KeyPress
    http://feiyun0112.cnblogs.com/
    2009年5月11日 1:05
    版主
  •  Dim Kc As Integer = AscW(e.KeyChar)
            If Kc = 11 Then imu = Not imu : Exit Sub
            If imu Then Exit Sub
            Select Case Kc
                Case 47 : Kc = 1574
                Case 63 : Kc = 1567
                Case 44 : Kc = 1548
                Case 109, 77 : Kc = 1605
                Case 110, 78 : Kc = 1606
                Case 98, 66 : Kc = 1576
                Case 118, 86 : Kc = 1736
                Case 99, 67 : Kc = 1594
                Case 120, 88 : Kc = 1588
                Case 122, 90 : Kc = 1586
                Case 97, 65 : Kc = 1726
                Case 115, 83 : Kc = 1587
                Case 100 : Kc = 1583
                Case 68 : Kc = 1688
                Case 102 : Kc = 1575
                Case 70 : Kc = 1601
                Case 103 : Kc = 1749
                Case 71 : Kc = 1711
                Case 104 : Kc = 1609
                Case 72 : Kc = 1582
                Case 106 : Kc = 1602
                Case 74 : Kc = 1580
                Case 107 : Kc = 1603
                Case 75 : Kc = 1734
                Case 108, 76 : Kc = 1604
                Case 59 : Kc = 1563
                Case 113, 81 : Kc = 1670
                Case 119, 87 : Kc = 1739
                Case 101, 69 : Kc = 1744
                Case 114, 82 : Kc = 1585
                Case 116, 84 : Kc = 1578
                Case 121, 89 : Kc = 1610
                Case 117, 85 : Kc = 1735
                Case 105, 73 : Kc = 1709
                Case 111, 79 : Kc = 1608
                Case 112, 80 : Kc = 1662
                Case Else : Kc = 0
            End Select
            If Kc <> 0 Then e.KeyChar = ChrW(Kc)
    这个代码是插入在Textbox的KeyPress事件里面,但是写在RichTextBox的keypress里面就不行。。。textbox和richtextbox功能差不多一样但是,这个代码为什么不行。。我郁闷啊。。。
    muradil
    2009年5月11日 3:31
  • 这里richtextbox好像不支持Unicode输入。直接输入Unicode字符就乱码或者不显示。上面那个代码是textbox的Unicode输入。但是在richtextbox上不行。
    muradil
    2009年5月11日 5:25
  • Hi 穆拉迪力,

    经过我的测试,的确发现RichTextBox在这个问题上显示不正常,只有当你按下第一个key的时候RichTextBox能正常显示经转换的字符,但后面的键入字符都变成空格。

    其实RichTextBox是可以显示那些“阿拉伯字符的代码”的,这点你通过复制TextBox里的代码到RichTextBox可以看出。我想是因为RichTextBox在处理键盘字符输入事件里有些差别。虽然没有明确文档可以证实这一点。

    目前我的解决方案是在你代码的底部加一句,让TextBox里的东西复制到RichTextBox, 并将那个临时过渡用的TextBox的Visible属性设置为False。这样看上去RichTextBox能正常工作了。
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
            Dim Kc As Integer = AscW(e.KeyChar)
            If Kc = 11 Then imu = Not imu : Exit Sub
            If imu Then Exit Sub
            Select Case Kc
                Case 47 : Kc = 1574
                Case 63 : Kc = 1567
                Case 44 : Kc = 1548
                Case 109, 77 : Kc = 1605
                Case 110, 78 : Kc = 1606
                Case 98, 66 : Kc = 1576
                Case 118, 86 : Kc = 1736
                Case 99, 67 : Kc = 1594
                Case 120, 88 : Kc = 1588
                Case 122, 90 : Kc = 1586
                Case 97, 65 : Kc = 1726
                Case 115, 83 : Kc = 1587
                Case 100 : Kc = 1583
                Case 68 : Kc = 1688
                Case 102 : Kc = 1575
                Case 70 : Kc = 1601
                Case 103 : Kc = 1749
                Case 71 : Kc = 1711
                Case 104 : Kc = 1609
                Case 72 : Kc = 1582
                Case 106 : Kc = 1602
                Case 74 : Kc = 1580
                Case 107 : Kc = 1603
                Case 75 : Kc = 1734
                Case 108, 76 : Kc = 1604
                Case 59 : Kc = 1563
                Case 113, 81 : Kc = 1670
                Case 119, 87 : Kc = 1739
                Case 101, 69 : Kc = 1744
                Case 114, 82 : Kc = 1585
                Case 116, 84 : Kc = 1578
                Case 121, 89 : Kc = 1610
                Case 117, 85 : Kc = 1735
                Case 105, 73 : Kc = 1709
                Case 111, 79 : Kc = 1608
                Case 112, 80 : Kc = 1662
                Case Else : Kc = 0
            End Select
            If Kc <> 0 Then e.KeyChar = ChrW(Kc)
            RichTextBox1.Text += TextBox1.Text
        End Sub

    Sincerely,
    Kira Qian


    Please mark the replies as answers if they help and unmark if they don't.
    2009年5月12日 3:19
  • 这样解决时不合理的。你看嘛, RichTextBox1.Text += TextBox1.Text,这样加起来的结果是把RichTextbox的内容加起来,加加加最后加出来的当然不是Textbox的值。而且这不是我想要的答案。呵呵。但是还是谢谢你。
    我在网上查到Textbox可以是utf_8,ansi,Unicode等等都支持,但是Richtextbox没有这些。不支持Utf_8,Unicode,但是不知道把RichTextBox的ansi编码换成Unicode的编码或者是utf_8的编码。vb6.0有一个代码
    StrConv("上海市", vbFromUnicode),把ANSI的代码换成Unicode的代码,但是vb.net里面就是找不到。上面的代码是先把键盘的值取出来然后换成阿拉伯Unicode字符的ASCII码。richtextbox就是不行啊。。。。大家帮个忙。。。谢谢


    muradil
    2009年5月12日 4:55
  • Hi 穆拉迪力,

    我想知道你为什么想用RichTextBox?

    Sincerely,
    Kira Qian


    Please mark the replies as answers if they help and unmark if they don't.
    2009年5月12日 7:01
  • 呵呵。。。不是想用,而是想学点东西。StrConv函数在.net里面是不行的。因为我是一个少数民族(维族),因为没有像阿拉伯数字一样的直接的输入法。只能借用unicode的帮助下才能在电脑上写出我们的文字。中国是那么大的国家,土耳其,吉尔吉斯坦,哈萨克斯坦之类的这些国家都可以用微软的产品来直接输入自己的文字,但我们中国的少数民族就不能。我真是想不通。没有unicode就不能写出我们的文字。所以。。。。


    muradil
    2009年5月12日 9:29
  • 你好!
         你想开发一个维吾尔族的输入法吧!很好的想法啊!毕竟世界上的所有人都需要使用电脑的!
         这里有一些维吾尔族的输入法工具,希望对你有帮助:
    http://www.verycd.com/groups/@g2155355/318224.topic
         用emule就可以下载了啊!
    周雪峰
    2009年5月12日 11:03
    版主
  • 这些输入法我都有。呵呵。。毕竟是维吾尔族。呵呵。。。谢谢。。。但我的问题还没解决啊。用这些收入法都没用。用这些输入法不能给Richtextbox里写东西。显示出来的都是空格一样。但是给其他的文本框赋值就可以显示。

    Imports System.IO
    
    Imports System.Text
    
    Imports System
    
    Imports Microsoft.VisualBasic
    
    Public Class Form1
    
        ' Create a UTF-8 encoding. 
    
        Dim utf8 As New UTF8Encoding()
    
    
    
        ' A Unicode string with two characters outside an 8-bit code range. 
    
        Dim unicodeString As String
    
        Dim decodedString As String
    
        Dim unicodeStri As String
    
        Dim decodedStri As String
    
            
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            'Console.WriteLine("Original string:")
    
            unicodeString = RichTextBox1.Text '"مۇرادىل"
    
            ' RichTextBox1.Text = (unicodeString)
    
        End Sub
    
    
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    
            ' Encode the string. 
    
            Dim encodedBytes As Byte() = utf8.GetBytes(unicodeString)
    
            'Dim b As Byte
    
            ' For Each b In encodedBytes
    
            'RichTextBox1.Text = (b)
    
            'Next b
    
    
    
            ' Decode bytes back to string. 
    
            ' Notice Pi and Sigma characters are still present. 
    
            decodedString = utf8.GetString(encodedBytes)
    
            '   Console.WriteLine()
    
            'Console.WriteLine("Decoded bytes:")
    
            RichTextBox2.Text = (decodedString)
    
    
    
        End Sub
    
        Public imu As Boolean
    
    
    
        Private Sub RichTextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles RichTextBox1.KeyPress
    
            Dim encodedBytes As Byte() = utf8.GetBytes(e.KeyChar)
    
            Dim decodedString As String = utf8.GetString(encodedBytes)
    
            unicodeString = decodedString
    
            e.KeyChar = decodedString
    
        End Sub
    
        Private Sub RichTextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyUp
    
            If RichTextBox1.Text <> "" Then
    
                ' unicodeStri = RichTextBox1.Text '"مۇرادىل"
    
                Dim encodedByt As Byte() = utf8.GetBytes(RichTextBox1.Text)
    
                decodedStri = utf8.GetString(encodedByt)
    
                RichTextBox1.Text = (decodedStri)
    
            End If
    
        End Sub
    
    End Class
    我用这个代码,把Richtextbox里面的ANSI编码换成unicode的编码。但是显示出来的都是反过来的。比如说我写“我是”,它就给我显示“是我”。差一点了。大家帮个忙。。。呵呵。。。谢谢。。。
    muradil
    2009年5月12日 11:55
  • 这个可能和Unicode字节顺序标记有关,你这样试试:
    Dim
     utf8 As
     New
     UTF8Encoding(True
    )

    周雪峰
    2009年5月12日 12:33
    版主