删除文本框中的结束字符而不重写所有数据

Lag*_*ter 2 vb.net serial-communication

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

RichTextBox1.Text.Remove(RichTextBox1.TextLength, 1)
Run Code Online (Sandbox Code Playgroud)

我试图在函数中抛出一些数字,但不会导致错误输出,但是没有从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
Run Code Online (Sandbox Code Playgroud)

这是接收数据的代码

    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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*all 7

您正在使用的String.Remove方法返回一个String,它不会对原始字符串执行任何操作.

来自MSDN链接:

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

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

RichTextBox1.Text = RichTextBox1.Text.Remove(RichTextBox1.TextLength - 1, 1)
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

RichTextBox1.SelectionStart = RichTextBox1.TextLength - 1
RichTextBox1.SelectionLength = 1
RichTextBox1.ReadOnly = False
RichTextBox1.SelectedText = ""
RichTextBox1.ReadOnly = True
Run Code Online (Sandbox Code Playgroud)