VB.net 숫자만 허용하려면 텍스트 상자 필요
저는 VB.net (독학)에 꽤 익숙하며, 코드를 만드는 데 도움을 줄 수 있는 사람이 있는지 궁금했습니다.너무 관련된 ▁a▁have▁i다아니닙▁just것이,▁too▁anything저하▁involved'▁to는. 그냥 한 번 해보세요.TextBox
1 사이의 할 수 있습니다.문자열이나 10보다 큰 숫자는 허용하지 않습니다.누군가 단어나 문자를 입력하면 올바른 숫자를 입력하라는 오류 메시지가 나타납니다.이것이 제가 가진 것입니다. 분명히 제가 문제를 겪고 있기 때문에 좋지 않습니다.도움을 줄 수 있는 사람에게 다시 한번 감사드립니다.
If TxtBox.Text > 10 Then
MessageBox.Show("Please Enter a Number from 1 to 10")
TxtBox.Focus()
ElseIf TxtBox.Text < 10 Then
MessageBox.Show("Thank You, your rating was " & TxtBox.Text)
Total = Total + 1
ElseIf IsNumeric(TxtBox.Text) Then
MessageBox.Show("Thank you, your rating was " & ValueTxtBox.Text)
End If
ValueTxtBox.Clear()
ValueTxtBox.Focus()
아스키 정수를 사용하여 이 작업을 수행할 수 있습니다.텍스트 상자의 키 누르기 이벤트에 이 코드를 입력합니다. e.KeyChar
누른 키를 나타냅니다.된 기능인 그고내기능은된장리.Asc()
이 값을 ASCII 정수로 변환합니다.
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
'97 - 122 = Ascii codes for simple letters
'65 - 90 = Ascii codes for capital letters
'48 - 57 = Ascii codes for numbers
If Asc(e.KeyChar) <> 8 Then
If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
e.Handled = True
End If
End If
End Sub
이것은 키 입력과 복사/붙여넣기를 모두 처리하기 위해 수행한 작업입니다.
Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox.KeyPress
If Not Char.IsNumber(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar) Then
e.Handled = True
End If
End Sub
Private Sub TextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox.TextChanged
Dim digitsOnly As Regex = New Regex("[^\d]")
TextBox.Text = digitsOnly.Replace(TextBox.Text, "")
End Sub
소수와 음수를 허용하려면 다음을 추가합니다.
AndAlso Not e.KeyChar = "." AndAlso Not e.keyChar = "-"
키 프레스 섹션의 if 문으로 이동합니다.
VB.NET의 TextBox 검증을 위한 가장 간단한 솔루션
먼저 프로젝트에 새 VB 코드 파일을 추가합니다.
- 솔루션 탐색기로 이동
- 프로젝트를 마우스 오른쪽 단추로 클릭합니다.
- 추가 > 새 항목 선택...
- 새 VB 코드 파일(예: vb) 추가
또는 ++ShiftA를 누릅니다.
다음 코드를 이 파일에 복사하여 붙여넣고 적절한 이름을 지정합니다.(예: 키 검증.vb)
Imports System.Text.RegularExpressions
Module Module1
Public Enum ValidationType
Only_Numbers = 1
Only_Characters = 2
Not_Null = 3
Only_Email = 4
Phone_Number = 5
End Enum
Public Sub AssignValidation(ByRef CTRL As Windows.Forms.TextBox, ByVal Validation_Type As ValidationType)
Dim txt As Windows.Forms.TextBox = CTRL
Select Case Validation_Type
Case ValidationType.Only_Numbers
AddHandler txt.KeyPress, AddressOf number_Leave
Case ValidationType.Only_Characters
AddHandler txt.KeyPress, AddressOf OCHAR_Leave
Case ValidationType.Not_Null
AddHandler txt.Leave, AddressOf NotNull_Leave
Case ValidationType.Only_Email
AddHandler txt.Leave, AddressOf Email_Leave
Case ValidationType.Phone_Number
AddHandler txt.KeyPress, AddressOf Phonenumber_Leave
End Select
End Sub
Public Sub number_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
Dim numbers As Windows.Forms.TextBox = sender
If InStr("1234567890.", e.KeyChar) = 0 And Asc(e.KeyChar) <> 8 Or (e.KeyChar = "." And InStr(numbers.Text, ".") > 0) Then
e.KeyChar = Chr(0)
e.Handled = True
End If
End Sub
Public Sub Phonenumber_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
Dim numbers As Windows.Forms.TextBox = sender
If InStr("1234567890.()-+ ", e.KeyChar) = 0 And Asc(e.KeyChar) <> 8 Or (e.KeyChar = "." And InStr(numbers.Text, ".") > 0) Then
e.KeyChar = Chr(0)
e.Handled = True
End If
End Sub
Public Sub OCHAR_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If InStr("1234567890!@#$%^&*()_+=-", e.KeyChar) > 0 Then
e.KeyChar = Chr(0)
e.Handled = True
End If
End Sub
Public Sub NotNull_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
Dim No As Windows.Forms.TextBox = sender
If No.Text.Trim = "" Then
MsgBox("This field Must be filled!")
No.Focus()
End If
End Sub
Public Sub Email_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
Dim Email As Windows.Forms.TextBox = sender
If Email.Text <> "" Then
Dim rex As Match = Regex.Match(Trim(Email.Text), "^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,3})$", RegexOptions.IgnoreCase)
If rex.Success = False Then
MessageBox.Show("Please Enter a valid Email Address", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Email.BackColor = Color.Red
Email.Focus()
Exit Sub
Else
Email.BackColor = Color.White
End If
End If
End Sub
End Module
이제 다음 코드를 사용하여 아래와 같은 로드 이벤트를 형성합니다.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AssignValidation(Me.TextBox1, ValidationType.Only_Digits)
AssignValidation(Me.TextBox2, ValidationType.Only_Characters)
AssignValidation(Me.TextBox3, ValidationType.No_Blank)
AssignValidation(Me.TextBox4, ValidationType.Only_Email)
End Sub
완료...!
먼저 입력이 실제로 정수인지 확인해야 합니다. 있다니습으로 하면 됩니다.Integer.TryParse
:
Dim intValue As Integer
If Integer.TryParse(TxtBox.Text, intValue) AndAlso intValue > 0 AndAlso intValue < 11 Then
MessageBox.Show("Thank You, your rating was " & TxtBox.Text)
Else
MessageBox.Show("Please Enter a Number from 1 to 10")
End If
사용해 보십시오.
Private Sub txtCaseID_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCaseID.KeyPress
If Not Char.IsNumber(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar) Then e.KeyChar = ""
End Sub
텍스트 상자 대신 숫자 업다운 컨트롤을 사용하면 코드를 피할 수 있습니다. 이 컨트롤은 자동으로 숫자만 허용하고 최대값과 최소값을 갖습니다.또한 사용하여 직접 번호에 액세스할 수 있습니다.NumericUpDown1.Value
위쪽 및 아래쪽 화살표를 사용하여 숫자를 설정할 수 있습니다.또한 최대값보다 큰 숫자를 입력하면 허용되는 가장 가까운 숫자로 점프합니다.
Private Sub MyTextBox_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles MyTextBox.KeyPress
If Not IsNumeric(e.KeyChar) And Not e.KeyChar = ChrW(Keys.Back) Then
e.Handled = True
End If
End Sub
Private Sub textBox5_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles textBox5.KeyPress
If Asc(e.KeyChar) <> 8 Then
If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
e.Handled = True
End If
End If
End Sub
Private Sub Data_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Data.KeyPress
If (Not e.KeyChar = ChrW(Keys.Back) And ("0123456789.").IndexOf(e.KeyChar) = -1) Or (e.KeyChar = "." And Data.Text.ToCharArray().Count(Function(c) c = ".") > 0) Then
e.Handled = True
End If
End Sub
Dim ch(10) As Char
Dim len As Integer
len = TextBox1.Text.Length
ch = TextBox1.Text.ToCharArray()
For i = 0 To len - 1
If Not IsNumeric(ch(i)) Then
MsgBox("Value you insert is not numeric")
End If
Next
If Not Char.IsNumber(e.KeyChar) AndAlso Not e.KeyChar = "." AndAlso Not Char.IsControl(e.KeyChar) Then
e.KeyChar = ""
End If
삭제 키를 사용하고 소수점을 설정할 수 있습니다.
이 게시물이 오래된 것은 알지만 텍스트박스를 IntBox라고 부르는 것으로 바꾸기 위해 구현한 것을 공유하고 싶습니다.
먼저 다음을 사용하여 확장해야 합니다.
<Runtime.CompilerServices.Extension()> _
Public Function HandledStringtoInteger(s As String) As Integer
Try
If s = String.Empty Then
Return 0
Else
Return Integer.Parse(s)
End If
Catch
Dim result As String = String.Empty
Dim ReturnInt As Integer
Dim Parsed As Integer
For Each Character In s.ToCharArray
If Character = "-" Then
If s.Substring(0, 1).ToString <> "-" Then
result = Character + result
End If
End If
If Character = "." Then
Exit For
End If
If Integer.TryParse(Character, Parsed) Then
result = result + Parsed.ToString
End If
Next
If result <> String.Empty Then
If Integer.TryParse(result, ReturnInt) Then
Return Integer.Parse(ReturnInt)
Else
If Double.Parse(result) > Double.Parse(Integer.MaxValue.ToString) Then
Return Integer.MaxValue
ElseIf Double.Parse(result) < Double.Parse(Integer.MinValue.ToString) Then
Return Integer.MinValue
Else
Return Integer.Parse(ReturnInt)
End If
End If
Else
Return 0
End If
End Try
End Function
그런 다음 TextChanged 이벤트 하위 항목을 만듭니다.
Private Sub TextBox_to_IntBox(sender As Object, e As TextChangedEventArgs) Handles YourTextBox.TextChanged
If DirectCast(sender, TextBox).IsKeyboardFocused Then
DirectCast(sender, TextBox).Text = DirectCast(sender, TextBox).Text.HandledStringtoInteger
DirectCast(sender, TextBox).CaretIndex = DirectCast(sender, TextBox).Text.Length
End If
End Sub
그런 다음 사용자가 텍스트를 입력할 때마다 문자열을 평가하고 표준 정수 범위 내에 있는 숫자 값만 반환합니다."-" 문자를 사용하여 정수를 양수에서 음수로 변경하고 다시 되돌릴 수 있습니다.
이 코드를 개선할 수 있는 것을 발견한 사람이 있으면 알려주십시오. 하지만 제 테스트는 IntBox를 만드는 데 환상적인 작동을 보여줍니다.
편집: 코드에서 속성을 사용할 경우 작동할 수 있는 다른 방법을 찾았습니다.(TextBox마다 별도의 속성이 필요합니다.)
먼저 속성을 만듭니다.
Public Class Properties
Implement INotifyPropertyChanged
Private _Variable as Integer
Public Property YourProperty as Object
get
Return _Variable
end get
set(value as Object)
_Variable = value.ToString.ToInteger 'I will give the ToInteger extension code later
end set
end property
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Sub OnPropertyChange(ByVal e As PropertyChangedEventArgs)
If Not PropertyChangedEvent Is Nothing Then
RaiseEvent PropertyChanged(Me, e)
End If
End Sub
End Class
그런 다음 창의 기본 클래스에서 바인딩을 만듭니다.
Public WithEvents _YourVariable as New Properties
Public Sub New()
InitializeComponent()
With YourTextBox
.SetBinding(Textbox.TextProperty, New Binding("YourProperty"))
.DataContext = _YourVariable
End With
End Sub
마지막으로 설정한 ToInteger 확장 코드는 다음과 같습니다.
''' <summary>
''' Handles conversion of variable to Integer.
''' </summary>
''' <param name="X"></param>
''' <param name="I">Returned if conversion fails.</param>
''' <returns>Signed 32bit Integer</returns>
''' <remarks></remarks>
<Runtime.CompilerServices.Extension()> _
Public Function toInteger(Of T)(ByRef X As T, Optional I As Integer = 0) As Integer
Dim S As String = X.ToString
Try
If S = String.Empty Then
Return I
Else
Return Integer.Parse(S)
End If
Catch
Dim result As String = String.Empty
Dim ReturnInt As Integer
Dim Parsed As Byte
For Each Character In S.ToCharArray
If Character = "-" Then
If S.Substring(0, 1).ToString <> "-" Then
result = Character + result
End If
End If
If Character = "." Then
Exit For
End If
If Byte.TryParse(Character, Parsed) Then
result = result + Parsed.ToString
End If
Next
If result <> String.Empty Then
If Integer.TryParse(result, ReturnInt) Then
Return Integer.Parse(ReturnInt)
Else
If Double.Parse(result) > Double.Parse(Integer.MaxValue.ToString) Then
Return Integer.MaxValue
ElseIf Double.Parse(result) < Double.Parse(Integer.MinValue.ToString) Then
Return Integer.MinValue
Else
Return Integer.Parse(ReturnInt)
End If
End If
Else
Return I
End If
End Try
End Function
이 모든 것이 결합되어 상자에 무언가를 입력할 때마다 텍스트 상자처럼 작동하지만 포커스가 변경되면 ToInteger 확장자가 값을 속성에 정수로 설정하고 텍스트 상자로 반환합니다.
즉, 포커스가 변경된 후 "-1w3"을 입력하면 자동으로 "-13"으로 돌아갑니다.
너무 늦었을 수도 있지만, VB에 있는 다른 새로운 혈액들을 위해, 여기 간단한 것이 있습니다.
첫째, 응용 프로그램에서 필요로 하지 않는 한 사용자의 키 입력을 차단하는 것은 좋지 않습니다. 사용자는 작업을 하드웨어 키보드의 문제로 잘못 해석하고 동시에 키 입력 오류가 어디서 발생했는지 알 수 없습니다.
여기 간단한 것이 있습니다. 사용자가 자유롭게 입력한 다음 나중에 오류를 트랩할 수 있습니다.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim theNumber As Integer
Dim theEntry As String = Trim(TextBox1.Text)
'This check if entry can be converted to
'numeric value from 0-10, if cannot return a negative value.
Try
theNumber = Convert.ToInt32(theEntry)
If theNumber < 0 Or theNumber > 10 Then theNumber = -1
Catch ex As Exception
theNumber = -1
End Try
'Trap for the valid and invalid numeric number
If theNumber < 0 Or theNumber > 10 Then
MsgBox("Invalid Entry, allows (0-10) only.")
'entry was invalid return cursor to entry box.
TextBox1.Focus()
Else
'Entry accepted:
' Continue process your thing here...
End If
End Sub
저는 텍스트가 1에서 10 범위인지 확인할 솔루션을 가지고 있습니다: [1-9]는 1에서 9 범위를 확인할 것입니다.저는 10개를 확인하기 위해 한 가지 조건을 더 사용합니다.
If txtBox.Text Like "[1-9]" Or txtBox.Text Like "10" Then
MessageBox.Show("true")
Else
MessageBox.Show("false")
End If
먼TextBox 정을 합니다.MaxLength
로입텍력 2니다제합의 합니다.TextBox
그러면 를 사용하여 이와 같은 것을 시도할 수 있습니다. 당신은 최대 2자리 숫자(10)를 사용하기 때문에 당신은 다음과 같은 것을 사용해야 할 것입니다.Key
를 들면Enter
검사를 시작합니다.
Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim tb As TextBox = CType(sender, TextBox)
If Not IsNumeric(e.KeyChar) Then 'Check if Numeric
If Char.IsControl(e.KeyChar) Then 'If not Numeric Check if a Control
If e.KeyChar = ChrW(Keys.Enter) Then
If Val(tb.Text) > 10 Then 'Check Bounds
tb.Text = ""
ShowPassFail(False)
Else
ShowPassFail(True)
End If
e.Handled = True
End If
Exit Sub
End If
e.Handled = True
ShowPassFail(False)
End If
End Sub
Private Sub ShowPassFail(pass As Boolean)
If pass Then
MessageBox.Show("Thank you, your rating was " & TextBox1.Text)
Else
MessageBox.Show("Please Enter a Number from 1 to 10")
End If
TextBox1.Clear()
TextBox1.Focus()
End Sub
Public Function Isnumber(ByVal KCode As String) As Boolean
If Not Isnumeric(KCode) And KCode <> ChrW(Keys.Back) And KCode <> ChrW(Keys.Enter) And KCode <> "."c Then
MsgBox("Please Enter Numbers only", MsgBoxStyle.OkOnly)
End If
End Function
Private Sub txtBalance_KeyPress(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtBalance.KeyPress
If Not Isnumber(e.KeyChar) Then
e.KeyChar = ""
End If
End Sub
이건 나한테 효과가 있었어요선택하지 않은 키를 누르면 텍스트 상자가 완전히 지워집니다.
Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
If IsNumeric(TextBox2.Text) Then
'nada
Else
TextBox2.Clear()
End If
End Sub
이 기능을 vb.net 프로젝트 내의 모든 모듈에 복사합니다.
Public Function MakeTextBoxNumeric(kcode As Integer, shift As Boolean) As Boolean
If kcode >= 96 And kcode <= 105 Then
ElseIf kcode >= 48 And kcode <= 57
If shift = True Then Return False
ElseIf kcode = 8 Or kcode = 107 Then
ElseIf kcode = 187 Then
If shift = False Then Return False
Else
Return False
End If
Return True
End Function
그런 다음 아래와 같이 textbox_keydown 이벤트 내에서 이 함수를 사용합니다.
Private Sub txtboxNumeric_KeyDown(sender As Object, e As KeyEventArgs) Handles txtboxNumeric.KeyDown
If MakeTextBoxNumeric(e.KeyCode, e.Shift) = False Then e.SuppressKeyPress = True
End Sub
그리고 네.100% 효과가 있습니다 :)
텍스트 상자의 온다운 속성을 사용하여 값을 숫자로만 제한할 수 있습니다.
<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (!(event.keyCode>=65) && event.keyCode!=32);"></asp:TextBox>
!(keyCode>=65)를 선택하면 알파벳이 제외됩니다.
키코드!=32 체크는 숫자 사이에 공백 문자를 제외하는 것입니다.
기호를 텍스트 상자에 입력하지 않으려면 아래 조건도 'onkeydown' 속성에 포함합니다.
!(event.shiftKey && (event.keyCode >= 48 && event.keyCode <= 57))
따라서 TextBox가 됩니다.
<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (!(event.keyCode>=65) && event.keyCode!=32 && !(event.shiftKey && (event.keyCode >= 48 && event.keyCode <= 57)));"></asp:TextBox>
설명:
'a'의 키코드는 '65'이고 'z'는 '90'입니다.
다른 기호인 '90'부터 '222'까지의 키 코드도 필요하지 않습니다.
'Space' Key의 KeyCode는 '32'이며, 이 역시 필요하지 않습니다.
그러면 'Shift' 키와 'Number' 키(기호를 나타냄)의 조합도 필요하지 않습니다.'0'의 키코드는 '48'이고 '9'는 '57'입니다.
따라서 이 모든 것은 원하는 결과를 생성하는 TextBox 선언 자체에 포함됩니다.
한번 보세요.
이게 내 마지막...또한 다음과 같은 모든 유형 문제를 해결합니다.
다음은 숫자가 필요한 간단한 텍스트 상자입니다.
public Sub textbox_memorytotal_TextChanged(sender As Object, e As EventArgs) Handles textbox_memorytotal.TextChanged
TextboxOnlyNumbers(sender)
End Sub
모든 잘못된 입력을 수정하는 절차는 다음과 같습니다.
Public Sub TextboxOnlyNumbers(ByRef objTxtBox As TextBox)
' ONLY allow numbers
If Not IsNumeric(objTxtBox.Text) Then
' Don't process things like too many backspaces
If objTxtBox.Text.Length > 0 Then
MsgBox("Numerical Values only!")
Try
' If something bad was entered delete the last character
objTxtBox.Text = objTxtBox.Text.Substring(0, objTxtBox.Text.Length - 1)
' Put the cursor and the END of the corrected number
objTxtBox.Select(objTxtBox.Text.Length + 1, 1)
Catch ex As Exception
End Try
End If
End If
End Sub
텍스트 상자 키다운 이벤트에 사용합니다.
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
'you can enter decimal "if nonNumberEntered(e, TextBox1, True) then"
'otherwise just numbers "if nonNumberEntered(e, TextBox1) then"
If nonNumberEntered(e, TextBox1, True) Then
e.SuppressKeyPress = True
End If
If e.KeyCode = Keys.Enter Then
'put your code here
End If
End Sub
이 기능을 vb.net 프로젝트 내의 모든 모듈에 복사합니다.
Public Function nonNumberEntered(ByVal e As System.Windows.Forms.KeyEventArgs, _
ByVal ob As TextBox, _
Optional ByVal decim As Boolean = False) As Boolean
nonNumberEntered = False
If decim Then
' Determine whether the keystroke is a number from the top of the keyboard.
If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
' Determine whether the keystroke is a number from the keypad.
If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
If e.KeyCode <> Keys.Decimal And e.KeyCode <> Keys.OemPeriod Then
If e.KeyCode <> Keys.Divide And e.KeyCode <> Keys.OemQuestion Then
' Determine whether the keystroke is a backspace.
If e.KeyCode <> Keys.Back And e.KeyCode <> Keys.Delete _
And e.KeyCode <> Keys.Left And e.KeyCode <> Keys.Right Then
' A non-numerical keystroke was pressed.
nonNumberEntered = True
End If
ElseIf ob.Text.Contains("/") Or ob.Text.Length = 0 Then
nonNumberEntered = True
End If
ElseIf ob.Text.Contains(".") Or ob.Text.Length = 0 Then
nonNumberEntered = True
End If
End If
End If
Else
' Determine whether the keystroke is a number from the top of the keyboard.
If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
' Determine whether the keystroke is a number from the keypad.
If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
' Determine whether the keystroke is a backspace.
If e.KeyCode <> Keys.Back And e.KeyCode <> Keys.Delete _
And e.KeyCode <> Keys.Left And e.KeyCode <> Keys.Right Then
' A non-numerical keystroke was pressed.
nonNumberEntered = True
End If
End If
End If
End If
'If shift key was pressed, it's not a number.
If Control.ModifierKeys = Keys.Shift Then
nonNumberEntered = True
End If
End Function
이렇게 하면 "nonNumberEntered(e,Textbox1,True)"라는 데심을 사용하는 경우 2/4 또는 3.5와 같은 숫자를 텍스트 상자에 입력할 수 있습니다.
"nonNumberEntered(e,Textbox1,False)" 또는 "nonNumberEntered(e,Textbox1)"를 사용하는 경우 텍스트 상자에 숫자만 입력할 수 있습니다.
편집: 텍스트가 추가되었습니다.
최근에 비슷한 사용 요구사항이 있었습니다.TextBox
숫자만 입력할 수 있습니다.
결국 나는 a를 사용했습니다.MaskedTextBox
신에대 TextBox
텍스트 상자에 대해 "마스크"를 정의하면 사용자가 정의한 문자(이 경우 숫자)만 허용됩니다.단점은 그것이 내부에 약간의 추악한 선을 남겼다는 것입니다.TextBox
;
내가 좋아하는 것은MaskedTextBox
그것이 그렇게 커스터마이즈 가능했는지.만약, 어떤 이유로 당신이 원했다면,TextBox
과 23 int 형의입력 2 식의수려 2 문하면락, ▁the▁int▁3▁to▁in▁you다것니입▁set▁input▁an▁is▁of▁format,는▁all▁to▁3▁the하정▁accept▁do▁need▁int▁only설▁letterss를 설정하기만 하면 됩니다.TextMask
000LL
Visual Studio에는 사전 정의된 마스크가 많이 있으며 전체 설명서는 여기에서 확인할 수 있습니다.
자, 이것이 당신의 문제를 완전히 해결하지는 않는다는 것을 알지만, 사용하는 것은MaskedTextBox
문제의 복잡성의 상당 부분을 제거합니다. 이다음내보수있다습니의 할 수 .MaskedTextBox
으로도 계속 로만 될 입니다.Int
단순실허를 할 수 허용If
이 을값보기위진술한하장▁the진▁to술▁statement▁ensure▁is▁value위한기라는 것을 확인하는 문장.=<10
이 게시물이 오래된 것은 알지만 코드를 공유하고 싶습니다.
Private Sub txtbox1_TextChanged(sender As Object, e As EventArgs) Handles txtbox1.TextChanged
If txtbox1.Text.Length > 0 Then
If Not IsNumeric(txtbox1.Text) Then
Dim sel As Integer = txtbox1.SelectionStart
txtbox1.Text = txtbox1.Text.Remove(sel - 1, 1)
txtbox1.SelectionStart = sel - 1
End If
End If
End Sub
텍스트 상자의 각 항목(이벤트 - 처리 제한됨)텍스트 상자.TextChanged), 입력한 텍스트를 정수로 카스트할 수 있습니다. 실패할 경우 제한된 텍스트 값을 재설정합니다.TextBox - 마지막 유효한 항목(temp1 변수에서 지속적으로 업데이트됨).
다음은 그 방법입니다.me.load 또는 mybase.load 형식으로 로드되는 하위에서 temp1을 기본값인 Restricted로 초기화합니다.텍스트 상자.본문
Dim temp1 As Integer 'initialize temp1 default value, you should do this after the default value for RestrictedTextBox.Text was loaded.
If (RestrictedTextBox.Text = Nothing) Then
temp1 = Nothing
Else
Try
temp1 = CInt(RestrictedTextBox.Text)
Catch ex As Exception
temp1 = Nothing
End Try
End If
형태의 다른 지점:
Private Sub textBox_TextChanged(sender As System.Object, e As System.EventArgs) Handles RestrictedTextBox.TextChanged
Try
temp1 = CInt(RestrictedTextBox.Text) 'If user inputs integer, this will succeed and temp will be updated
Catch ex As Exception
RestrictedTextBox.Text = temp1.ToString 'If user inputs non integer, textbox will be reverted to state the state it was in before the string entry
End Try
End Sub
이것의 좋은 점은 이것을 사용하여 텍스트 상자를 더블, unint 등 원하는 모든 유형으로 제한할 수 있다는 것입니다.
모든 텍스트 상자에는 다음과 같이 사용할 수 있는 유효성 검사 및 유효성 검사 이벤트가 있습니다.
Private Sub PriceTxt_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles PriceTxt.Validating
If Not IsNumeric(PriceTxt.Text) Then
PriceTxt.BackColor = Color.Red
MsgBox("The Price Should Be Numeric Only , Enter Again", vbCritical)
PriceTxt.Text = ""
PriceTxt.BackColor = Color.White
End If
End Sub
오래된 거 알아요편의를 위해 이 코드를 그냥 여기에 두겠습니다.
정수만:
Public Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
With TextBox1
If IsNumeric(.Text) Then .Text = .Text.Select(Function(x) If(IsNumeric(x), x, "")) : .SelectionStart = .TextLength
End With
' etc..
End Sub
수락을 합니다.Double
:
Public Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
With TextBox1
If IsNumeric(.Text) Then .Text = .Text.Select(Function(x) If(IsNumeric(x) Or x = ".", x, "")) : .SelectionStart = .TextLength
End With
' etc..
End Sub
을 수락합니다.+ - * /
, 호괄( ) [ ] { }
그리고.Double
:
Public Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
With TextBox1
If IsNumeric(.Text) Then .Text = .Text.Select(Function(x) If(IsNumeric(x) Or ".+-*/()[]{}".Contains(x), x, "")) : .SelectionStart = .TextLength
End With
' etc..
End Sub
팔로우 코드 텍스트 상자 키 누르기 이벤트를 사용할 수 있습니다.
Private Sub txtbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtbox1.KeyPress
Try
If Val(txtbox1.text) < 10 Then
If Char.IsLetterOrDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
e.Handled = True
End If
Else
e.Handled = True
End If
Catch ex As Exception
ShowException(ex.Message, MESSAGEBOX_TITLE, ex)
End Try
End Sub
이 코드는 숫자만 허용하며 1에서 10 사이의 숫자만 입력할 수 있습니다.
저에게 맞는 아주 간단한 코드입니다.
Private Sub Textbox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textbox1.KeyPress
If Asc(e.KeyChar) > 58 Then
e.KeyChar = ""
End If
End Sub
제게 도움이 되는 것은 이렇습니다.키보드의 맨 위 행과 숫자 패드의 숫자뿐만 아니라 백스페이스, 델도 사용할 수 있습니다.+ 및 - 기호는 제외됩니다.
Private Sub tbMQTTPort_KeyDown(sender As Object, e As KeyEventArgs) Handles tbMQTTPort.KeyDown
Dim kc As New KeyConverter
Dim Regex = New Regex("[^0-9]+")
e.Handled = Regex.IsMatch(kc.ConvertToInvariantString(e.Key).Replace("NumPad", ""))
End Sub
언급URL : https://stackoverflow.com/questions/9969824/vb-net-need-text-box-to-only-accept-numbers
'programing' 카테고리의 다른 글
변수가 Ruby의 문자열인지 확인합니다. (0) | 2023.06.01 |
---|---|
SQL Server 2008에서 루프하는 동안 작업 (0) | 2023.06.01 |
루비에서 예외를 높이는 것과 예외를 던지는 것의 차이점은 무엇입니까? (0) | 2023.06.01 |
장고 관리자의 필드 크기 조정 (0) | 2023.05.27 |
VBA의 범위에서 어레이 생성 (0) | 2023.05.27 |