vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · TextBox & RichTextBox   |   VB-Versionen: VB610.11.03
Intelligente TextBox für IP-Adressen

Dieser Tipp stellt eine Funktion zur formellen Prüfung von IP-Adressen zur Verfügung.

Autor:   Gerhard KuklauBewertung:     [ Jetzt bewerten ]Views:  20.635 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wer mit IP-Adressen programmtechnisch zu tun hat, stellt sich immer wieder die Frage, wie die Richtigkeit überprüft werden kann bzw. der Anwender daran gehindert eine formal falsche Eingabe zu tätigen.

Genau hier setzt die Intelligente TextBox für IP-Adressen an. Im Modul modIPNumCheck.bas sind zwei Functions enthalten, die uns dabei unterstützen.

Zunächst einmal brauchen wir ein neues Projekt, ein neues Modul (Name: modIPNumCheck) und eine Form mit einer TextBox (txtIPAddress). Im KeyPress-Event der TextBox werden die Functions fCheckIPNumericKey und fCheckIP wie folgt aufgerufen:

Private Sub txtIPAddress_KeyPress(KeyAscii As Integer)
  ' beim Drücken einer Taste wird die Gültigkeit geprüft,
  ' und nur der Wert "durchgelassen", der auch für die
  ' Erstellung einer IP-Adresse gültig ist:
 
  fCheckIPNumericKey KeyAscii
 
  If KeyAscii = 13 Then
    KeyAscii = 0
    With txtIPAddress
      If fCheckIP(.Text) = False Then
        .SelStart = 0
        .SelLength = Len(.Text)
      Else
        MsgBox "IP-Adresse=" & .Text & " ist in Ordnung!", _
          vbInformation, "IP-Check"
      End If
    End With
  End If
End Sub

Im Modul (modIPNumCheck.bas) speichern Sie bitte folgenden Code:

Option Explicit
 
' --------------------------------------------------------
' modIPNumCheck
' =============
' Das Modul enthält zwei Funktionen, die der Überprüfung
' von IP-Adressen (gültige Eingabe) dienen.
' 
' - fCheckIPNumericKey
'   diese Function wird im Event KeyPress der TextBox
'   aufgerufen und läßt nur die für IP-Adressen
'   gültigen Werte zu.
' 
' - fCheckIP
'   diese Function überprüft den übergebenen String auf
'   formale Richtigkeit von IP-Adressen (incl. Werte!)
' 
' Version: 1.0
' 
' (c) 2003, Gerhard Kuklau
' --------------------------------------------------------
Public Sub fCheckIPNumericKey(KeyAscii As Integer)
  ' Function zum Numeric-Check von IP-Adressen und SubNetMask's:
  ' ============================================================
  ' Eine spezielle Function zur Numeric-Prüfung für IP-Adressen
  ' und SubNetMask's.
  ' Es werden nur positive Zahlenwerte und der Punkt zugelassen.
  ' Als Komfort wird das Komma in einen Punkt konvertiert.
 
  Select Case KeyAscii
    Case 48 To 57, 8, 13        ' Zahlen, Backspace und Return
    Case 46, 44                 ' Aus Komma wird autom. Punkt
        If KeyAscii = 44 Then KeyAscii = 46
    Case Else                   ' alle anderen Zeichen ignorieren
      KeyAscii = 0
  End Select
End Sub
Public Function fCheckIP(sIP As String) As Boolean
  ' Function zum Checken der IP-Adresse:
  ' ====================================
  ' Die Ip-Adresse wird als ganzes, also kpl. geprüft
  ' Sie wird in ihre einzelnen Octetts zerlegt und jedes
  ' einzeln geprüft und ggf. korrigiert (s.u. führende Nullen).
  ' Führende Nullen in IP-Adressen sind nicht erlaubt!
  ' Aus diesem Grund werden sie von der Function entfernt.
  ' Wenn eine Unstimmigkeit auftritt, wird die Function
  ' abgebrochen und False zurückgegeben
  ' Bei bestandener Prüfung gibt die Function True zurück
 
  Dim sOctett() As String
  Dim nZahl As Long
  Dim i As Long
 
  ' IP ist formal falsch:
  ' =====================
  sOctett = Split(sIP, ".", -1, vbTextCompare)
  If UBound(sOctett) <> 3 Then
    fCheckIP = False
    Exit Function
  End If
 
  For i = 0 To UBound(sOctett)
    ' die Ip-Adresse wird in ihre Bestandteile (Octetts) zerlegt:
    ' ===========================================================
 
    nZahl = CInt(sOctett(i))
    Select Case i
      Case 0:     ' 1. Octett
        Select Case nZahl
          Case 10 To 255:     ' Wert im erlaubten Bereich
            sOctett(i) = CStr(nZahl)
          Case Else:          ' Wert ungültig
            fCheckIP = False
            Exit Function
        End Select
 
      Case 1, 2:  ' 2. + 3. Octett
        Select Case nZahl
          Case 0 To 255:      ' Wert im erlaubten Bereich
            sOctett(i) = CStr(nZahl)
          Case Else:          ' Wert ungültig
            fCheckIP = False
            Exit Function
        End Select
 
      Case 3:     ' 4. Octett
        Select Case nZahl
          Case 1 To 255:     ' Wert im erlaubten Bereich
            sOctett(i) = CStr(nZahl)
          Case Else:          ' Wert ungültig
            fCheckIP = False
            Exit Function
        End Select
 
      Case Else:  ' die IP ist formal falsch
        fCheckIP = False
        Exit Function
    End Select
  Next i
 
  ' jetzt nur noch die IP wieder richtig zusammen bauen und fertig:
  ' ===============================================================
  sIP = Join(sOctett, ".")
  fCheckIP = True
End Function

Die Funktion fCheckIP eignet sich nicht nur in Verbindung mit der Eingabe einer IP-Adresse, sondern auch um eine vorhandene IP-Adresse formell zu prüfen!