You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB中TextBox输入首字符自动补全-70-后光标错位如何解决

问题根因

  • WinForm的KeyPress事件执行时,用户按下的字符默认会在事件处理完成后自动插入到文本框的光标位置。原代码未将刚输入的S/M加入文本内容,也没有禁用系统默认的插入逻辑,会导致你手动写入-70-后,系统又把输入的首字母插到末尾,出现-70-S的异常。
  • 你补充的代码存在语法错误:temp是你定义的字符串变量,不存在Text和SelectionStart属性,所以逻辑完全不生效。

修复后完整代码

Private Sub TB_Nr_Keypress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TB_Nr.KeyPress
    ' 放行退格、删除等控制键,不拦截正常编辑操作
    If Char.IsControl(e.KeyChar) Then
        Return
    End If

    Dim currentLength As Integer = TB_Nr.Text.Length
    Try
        Select Case currentLength
            Case 0
                If e.KeyChar = "S"c OrElse e.KeyChar = "M"c Then
                    ' 手动拼接首字母和固定前缀,直接赋值给文本框
                    TB_Nr.Text = e.KeyChar & "-70-"
                    ' 光标移到文本末尾方便后续输入
                    TB_Nr.SelectionStart = TB_Nr.TextLength
                    ' 禁用系统默认插入逻辑,避免重复插入首字母
                    e.Handled = True
                Else
                    ' 非法首字符直接拦截
                    e.Handled = True
                End If
            ' X-70-后接5位纯数字,对应文本总长度4到8的位置
            Case 4 To 8
                If Not Char.IsDigit(e.KeyChar) Then
                    e.Handled = True
                End If
            ' 5位数字输完后自动拼接横杠
            Case 9
                If Char.IsLetterOrDigit(e.KeyChar) Then
                    TB_Nr.Text &= "-" & e.KeyChar
                    TB_Nr.SelectionStart = TB_Nr.TextLength
                    e.Handled = True
                Else
                    e.Handled = True
                End If
            ' 末尾三位仅允许输入字母+数字
            Case 10 To 11
                If Not Char.IsLetterOrDigit(e.KeyChar) Then
                    e.Handled = True
                End If
            ' 超出最大长度直接拦截
            Case Else
                e.Handled = True
        End Select
    Catch ex As Exception
        Console.WriteLine("Fehler")
    End Try
End Sub

核心修改点

  1. 首字符输入时主动把用户输入的S/M拼入文本内容,符合X-70-的格式要求
  2. 文本内容赋值完成后立刻设置e.Handled = True,阻止系统重复插入用户输入的字符
  3. 修正了原补充代码中错误操作字符串变量的问题,直接对TextBox控件的属性进行赋值
  4. 新增控制键放行逻辑,避免用户无法正常删除、退格编辑

内容的提问来源于stack exchange,提问作者J98_2020

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:21:01