Проверка текстового поля для алфавитного и буквенно-цифрового текстового поля с "." - PullRequest
0 голосов
/ 26 февраля 2012

Это то, что я использую, но я хочу включить "."точка также в качестве ввода в текстовом поле

If Char.IsLetter(e.KeyChar) = False Then
    If e.KeyChar = CChar(ChrW(Keys.Back)) or e.KeyChar = CChar(ChrW(Keys.Space)) Then
        e.Handled = False
    Else
        e.Handled = True
    End If
End If

и

If Char.IsLetterOrDigit(e.KeyChar) = False Then
    If e.KeyChar = CChar(ChrW(Keys.Back)) or e.KeyChar = CChar(ChrW(Keys.Space)) Then
        e.Handled = False
    Else
        e.Handled = True
    End If
End If

Ответы [ 4 ]

2 голосов
/ 27 февраля 2012

Чтобы включить точку в список допустимых символов, используйте термин OrElse для проверки нескольких условий. Обратите внимание, что "." - это String, в отличие от "."c, который Char.

If Not (Char.IsLetterOrDigit(e.KeyChar) OrElse e.KeyChar = "."c) Then 
    If e.KeyChar = CChar(ChrW(Keys.Back)) or e.KeyChar = CChar(ChrW(Keys.Space)) Then 
        e.Handled = False 
    Else 
        e.Handled = True 
    End If 
End If 
0 голосов
/ 07 июля 2015

Вы можете использовать следующую функцию:

    Private Function StripInput(sender As String) As String
    If sender <> String.Empty Then
        Dim lastChr As String = sender(sender.Length - 1)
        Dim stripList As String = "`¬!""£$%^&*()_+-=}{[]}~#@'':?/>.<,|\;"

        If stripList.Contains(lastChr) Then
            Return sender.Substring(0, sender.Length - 1)
        Else
            Return sender
        End If
    Else
        Return sender
    End If
End Function

и вызовите его из обработчика TextChanged текстового поля с помощью:

    sender.text = StripInput(sender.text)
    sender.SelectionStart = sender.Text.Length + 1

А если вы хотите включить какой-либо символ, просто удалите его из списка полос.

0 голосов
/ 18 августа 2013

Вы можете просто использовать код ASCII

If Asc(C$(F1)) > 122 Or Asc(C$(F1)) < 97 And Asc(C$(F1)) > 90 Or Asc(C$(F1)) < 65 And Asc(C$(F1)) > 57 Or Asc(C$(F1)) < 48 Then     
   Label9.Text = C$(F1) + " is an invalid Charater!"
End If

Для одного персонажа вы можете просто сделать Or variable =".". ASCII работает, когда вы хотите диапазон. Фрагмент кода взят из программы преобразования Numeric Base для проверки недействительных хартий в числе, которые преобразуют любую базу от 2 до 36. И с незначительной настройкой будет работать в любой форме BASIC, включая Applesoft (настройка без конца, если, и все на одна строка, label9.text становится переменной текста), что также можно сделать в VB.

0 голосов
/ 27 февраля 2012

Вы можете использовать мой контроль:

''' <summary>
''' By Amen Ayach
''' Use RoundNumber property to set how many decimal after "."
''' example: RoundNumber = 3 so if you write 654.4444 so onlostFocus you'll see 654.444
''' </summary>
''' <remarks></remarks>
Public Class TBRound
    Inherits TextBox

    Dim Enterly As Boolean = True

    Private _RoundNumber As Integer = 0
    Public Property RoundNumber() As Integer
        Get
            Return _RoundNumber
        End Get
        Set(ByVal value As Integer)
            _RoundNumber = value
        End Set
    End Property

    Public Overrides Property Text() As String
        Get
            Return MyBase.Text
        End Get
        Set(ByVal value As String)
            MyBase.Text = value
        End Set
    End Property

    Public Function format_Number(ByVal nb As String, ByVal isDivided As Boolean, ByVal NumberAfterComma As Integer) As String
        Dim str As String = ""
        Try
            Dim fromatString As String = ""

            Dim nbs As String = "."
            For i As Integer = 0 To NumberAfterComma - 1
                nbs += "0"
            Next

            If isDivided Then
                str = "#,###"
            Else
                str = "#"
            End If

            str += nbs
            str = Format(Val(Decimal.Parse(nb.ToString())), str)
        Catch
        End Try
        Return str
    End Function

    Private Sub TBRound_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        Dim allow As String = "0123456789." + ChrW(Keys.Back) + ChrW(Keys.Delete)
        If Not allow.Contains(e.KeyChar) Then
            e.Handled = True
        End If
    End Sub

    Private Sub TBRound_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus, Me.Validated
        Try
            If Not Decimal.TryParse(MyBase.Text, New Decimal) Then
                MyBase.Text = "0"
            Else
                ValDateMe()
            End If
        Catch
        End Try
    End Sub

    Private Sub ValDateMe()
        Try
            Dim value = MyBase.Text
            If Decimal.TryParse(MyBase.Text, New Decimal) Then
                If MyBase.Text <> format_Number(MyBase.Text, False, RoundNumber) Then
                    MyBase.Text = format_Number(MyBase.Text, False, RoundNumber)
                End If
            Else
                Enterly = False
                MyBase.Text = "0"
                Enterly = True
            End If
        Catch
        End Try
    End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...