2

我正在编写一个程序来通过串行端口进行通信。所有发送的数据都被镜像回来。一切正常,除了退格键。当我点击退格按钮时,我知道如何删除文本框中最后一个字符的唯一方法是使用 mid 函数,然后用新数据覆盖当前数据。当大量数据在 Richtextbox 中时,它开始闪烁。我曾尝试使用richtextbox.text.remove 函数,但出现此错误。“索引和计数必须引用字符串中的位置。参数名称:计数”

RichTextBox1.Text.Remove(RichTextBox1.TextLength, 1)

我试图将一些数字放入不会导致它出错但没有从richtextbox中删除数据的函数中。

这是传输数据的代码

   KeyCharString = e.KeyChar 'stores key being pressed into KeyCharString
    Try
        SerialPort1.Write(KeyCharString) 'tx data for key being pressed
    Catch ex As Exception
        MsgBox(ex.Message) 'Displays error if serialport1 cannot be written to
    End Try

    If Asc(KeyCharString) = 8 Then 'If char is a backspace remove precious character and exit sub
        RichTextBox1.Text = RichTextBox1.Text.Remove(RichTextBox1.TextLength, 1)
        'RichTextBox1.Text = Mid(RichTextBox1.Text, 1, RichTextBox1.TextLength - 1)'Old code used to remove the character.  Causes the richtextbox to flicker when rewriting the data
        Exit Sub
    End If

这是接收数据的代码

    receivedString = SerialPort1.ReadExisting.ToString

    If Asc(receivedString) = 8 Then 'deletes the received data if it is a backspace
        receivedString = ""
        Exit Sub
    End If
    RichTextBox1.AppendText(receivedString) 'adds new data to the richtextbox

有没有办法从 Richtextbox 中删除 1 个字符而不重写其中的所有数据?此外,richtextbox 是只读的。

4

1 回答 1

7

您使用的String.Remove方法返回一个字符串,它不对原始字符串做任何事情。

来自 MSDN 链接:

返回一个新字符串,其中当前实例中的所有字符(从指定位置开始到最后一个位置)都已被删除。

试试这个,但我不确定闪烁:

RichTextBox1.Text = RichTextBox1.Text.Remove(RichTextBox1.TextLength - 1, 1)

或类似的东西:

RichTextBox1.SelectionStart = RichTextBox1.TextLength - 1
RichTextBox1.SelectionLength = 1
RichTextBox1.ReadOnly = False
RichTextBox1.SelectedText = ""
RichTextBox1.ReadOnly = True
于 2012-07-03T22:48:17.047 回答