zoukankan      html  css  js  c++  java
  • 自写的简单屏蔽特定字符的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. :之前发的没注释,不专业了。怕是过一阵自己都看不懂了,补上。

  • 相关阅读:
    vs2010 setup 打包 安装 BAT批处理实现自动安装软件功能
    为什么我上传了flv或MP4文件到服务器,可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢
    异步编程:(TAP)基于任务的异步编程模型详解
    异步编程:IAsyncResult异步编程模型 (APM)
    WCF:调用方未由服务器进行身份验证
    django 操作数据库--orm(object relation mapping)---models
    python操作memcached以及分布式
    网络干货,无论是运维还是开发都要知道的网络知识系列之(七)
    一次完整的HTTP事务是怎样一个过程?
    网络干货,无论是运维还是开发都要知道的网络知识系列之(六)
  • 原文地址:https://www.cnblogs.com/zhangnn2fs/p/2517559.html
Copyright © 2011-2022 走看看