Gå til innhold

VB.NET: Kun Tall i en TextBox


Anbefalte innlegg

Tekstboksen heter txtBareTall

 

For å skrive inn bare tall er det enklest å bruke

2 hendelser (event)

 

De er KeyDown og KeyPress

 

KeyPress intreffer etter KeyDown, så du kan bruke KeyPress

for å hindre uønskede tegn i tekstboksen.

'Denne varibelen skal vise om de er et tall eller ikke
   Private bErIkkeEtTall As Boolean = False

   Private Sub txtBareTall_KeyDown(ByVal sender As Object, _
                                   ByVal e As System.Windows.Forms.KeyEventArgs) _
                                   Handles txtBareTall.KeyDown

       bErIkkeEtTall = False
       Select Case e.KeyCode
           Case Keys.D0 To Keys.D9, Keys.NumPad0 To Keys.NumPad9, Keys.Back
               bErIkkeEtTall = False
           Case Else
               bErIkkeEtTall = True
       End Select
   End Sub

   Private Sub txtBareTall_KeyPress(ByVal sender As Object, _
                                   ByVal e As System.Windows.Forms.KeyPressEventArgs) _
                                   Handles txtBareTall.KeyPress
       e.Handled = bErIkkeEtTall
   End Sub

 

Keys.D0 To Keys.D9 er de vanlige nummertastene.

Keys.NumPad0 To Keys.NumPad9 er tallene på det numeriske tastaturet.

Keys.Back er BackSpace eller Tilbake.

 

Ved å sette e.Handled = bErIkkeEtTall gir vi beskjed om det skal skrivest

inn et tegn eller ikke.

Så lenge denne er True vil det ikke bli skrevet noe.

Lenke til kommentar
Videoannonse
Annonse

Bra guide, men det er likevel ett problem med denne koden: du kan fremdeles lime inn bokstaver fra utklippstavlen. Siden jeg er nybegynner på VB.NET, så har jeg ingen løsninger på problemet, men i vb6 kunne du bruke API kallet SetWindowsLong for å gjøre tekstboksen Numeric only.

Lenke til kommentar

OK, her er SetWindowLong.

Det har ingen invirkning på hva som blir hentet inn fra utklippstavlen.

 

   Private Const GWL_STYLE = (-16)
   Private Const ES_NUMBER = &H2000
   Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
                           ByVal hwnd As IntPtr, ByVal nIndex As Integer) As Integer

   Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
                           ByVal hwnd As IntPtr, ByVal nIndex As Integer, _
                           ByVal dwNewLong As Integer) As Integer

   Private Sub frmBareTall_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
           Handles MyBase.Load

       Dim iFormat As Integer
       Dim iNummerFormat As Integer

       iFormat = GetWindowLong(txtBareTall.Handle, GWL_STYLE)
       iNummerFormat = SetWindowLong(txtBareTall.Handle, GWL_STYLE, iFormat Or ES_NUMBER)
   End Sub

 

 

Det enkleste er å behandle data fra utklipstavlen er ved hjelp av TextChanged, å bare erstatte ikke numerisk data med tom tekst.

 


   Private Sub txtBareTall_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
           Handles txtBareTall.TextChanged

       Dim iTeller As Integer
       Dim sTegn As String

       For iTeller = 1 To (txtBareTall.TextLength - 1)
           sTegn = Mid$(txtBareTall.Text, iTeller, 1)
           If Not IsNumeric(sTegn) Then
               txtBareTall.Text = Replace(txtBareTall.Text, sTegn, "")
               txtBareTall.SelectionStart = txtBareTall.TextLength
           End If
       Next
   End Sub


 

Det blir ikke bra, den beste løsninga er å lage din egen tekstboks, der du har

egen hurtigmeny som sjekker data på utklippstavlen ved innliming.

Lenke til kommentar
  • 3 år senere...

Eller man kan overskrive skapelsesparametrene til tekstboksens underliggende vindu:

Public Class NumericTextBox

    Inherits TextBox

 

    Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams

        Get

            Dim cp As CreateParams = MyBase.CreateParams

            cp.Style = cp.Style Or 8192 ' ES_NUMBER

            Return cp

        End Get

    End Property

End Class

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...