• 自写的简单屏蔽特定字符的TextBox和数字TextBox


    1.屏蔽特定字符的TextBox

    Public Class SpTextBox
        Inherits TextBox
        Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
            Dim selStart As Integer = Me.SelectionStart ’保存初始光标位置,方便之后固定光标位置
            Dim errorWordFlag As Integer = 0 ’标记是否出现过特定字符
            For i As Integer = 0 To Me.SelectionStart - 1

           ’防Access注入,屏蔽各种类型单引号,如果有其他需要可自行添加。
                If Me.Text(i) = "'" Or Me.Text(i) = "'" Or Me.Text(i) = "’" Then
                    Me.Text = Me.Text.Substring(0, i) + Me.Text.Substring(i + 1)
                    errorWordFlag = 1
                    Exit For
                End If
            Next

         ’出现过特定字符,调整光标位置
            If errorWordFlag = 1 Then
                Me.SelectionStart = selStart - 1
                Me.Focus()
                Exit Sub
            End If

            MyBase.OnTextChanged(e)
        End Sub
    End Class

     

    2.数字TextBox

    Public Class NumTextBox
        Inherits EESTextBox

        Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)

         Dim selStart As Integer = Me.SelectionStart ’保存初始光标位置,方便之后固定光标位置
            Dim wordFlag = 0 ’标记是否出现过非数字非"."字符

         ’"."开头的Pass掉

            If Me.Text.StartsWith(".") Then
                Me.Text = Me.Text.Substring(1, Me.Text.Length - 1)
                wordFlag = 1

            ’"."结尾的判断之前是否还有"."
            ElseIf Me.Text.EndsWith(".") Then
                If Me.Text.Length > 0 Then
                    For i As Integer = 1 To Me.SelectionStart - 1
                        If Me.Text(i) = "." And Me.Text.Substring(0, i).Contains(".") Then
                            Me.Text = Me.Text.Substring(0, i) + Me.Text.Substring(i + 1)
                            wordFlag = 1
                            Exit For
                        End If
                    Next
                End If
            Else

           ’循环扫描是否有非数字和"."的字符
                For i As Integer = 0 To Me.SelectionStart - 1
                    If Me.Text(i) <> "1" And Me.Text(i) <> "2" And Me.Text(i) <> "3" And Me.Text(i) <> "4" And Me.Text(i) <> "5" And Me.Text(i) <> "6" And Me.Text(i) <> "7" And Me.Text(i) <> "8" And Me.Text(i) <> "9" And Me.Text(i) <> "0" And Me.Text(i) <> "." Then
                        Me.Text = Me.Text.Substring(0, i) + Me.Text.Substring(i + 1)
                        wordFlag = 1
                        Exit For
                    End If
                Next
            End If

         ’如果有过非数字非"."字符,调整光标位置
            If wordFlag = 1 Then
                Me.SelectionStart = selStart - 1
                Me.Focus()
                Exit Sub
            End If

            MyBase.OnTextChanged(e)
        End Sub
    End Class

      目前两种TextBox还不免疫Ctrl+V的攻击(就是用Ctrl+V把非法字符贴过了还有问题),之后再完善。

      P.S. :之前发的没注释,不专业了。怕是过一阵自己都看不懂了,补上。

  • 相关阅读:
    高并发核心技术
    2年java,蚂蚁一面,卒
    Spring Boot 实战 入门
    spring-boot-plus后台快速开发脚手架之代码生成器使用
    spring-boot-plus后台快速开发框架1.0.0.RELEASE发布了
    spring-boot-plus后台快速开发框架1.0.0.RELEASE发布了
    Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip
    从尾到头打印单向链表
    单向链表操作
    合并两个排序的数组
  • 原文地址:https://www.cnblogs.com/zhangnn2fs/p/2517559.html
Copyright © 2020-2023  润新知