vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: Bestimmes Eingabeformat erzwingen 
Autor: VestMerkur
Datum: 01.09.05 13:27

Hallo Zwackel,
Du kannst auch dies probieren.
Ist (zugegeben) "etwas" aufwendiger, aber
- fängt u.a. fehlerhafte Eingaben (copy & paste) ab (normiert die Zeit)
- formatiert
- lässt keine 6-9 als dmin zu
- fehlerhafte Eingabe von "." oder "," wird korrigiert


Private Sub Text1_KeyPress(KeyAscii As Integer)
    Check_TimeInp KeyAscii, Text1
End Sub
 
Private Sub Text1_Validate(Cancel As Boolean)
' Beim Verlassen formatieren
    Check_TimeInp 13, Text1
End Sub
 
 
 
 
Public Sub Check_TimeInp(KeyAscii As Integer, cTBox As TextBox)
    '
    ' TimeInpTest testet die Eingabe in die TextBox cTBox, die als Control 
    ' übergeben wird.
    ' Es werden folgende Eingaben zugelassen:
    '
    ' 2 Stellen vor dem Komma:      hh
    ' 2 Stellen nach dem Komma:     mm
    ' nur Zahlen, ":", BackSpace, Return
    ' an der dmin-Stelle werden nur Zahlen 0-5 zugelassen!
    '
    '
    Dim kPos As Long
    Dim lVork As Long
    Dim dTime As Double
    '
    cTBox.MaxLength = 5
    '
    If KeyAscii = Asc(".") Then KeyAscii = Asc(":")
    If KeyAscii = Asc(",") Then KeyAscii = Asc(":")
    '
    If cTBox.SelLength = Len(cTBox) Then cTBox = vbNullString ' Wenn alles 
    ' markiert, löschen
    '
    kPos = cTBox.SelStart
    cTBox = Replace(cTBox, ",", ":") 'falsche Trenner ersetzen
    cTBox = Replace(cTBox, ".", ":")
    cTBox.SelStart = kPos
    '
    kPos = InStr(1, cTBox, ":")
    '
    If kPos <> 0 And KeyAscii = Asc(":") Then
        'kein 2. ":"
        KeyAscii = 0
    '
    ElseIf KeyAscii = Asc(":") And Len(cTBox) = 0 Then
        ' 0 einfügen
        KeyAscii = 0
        cTBox = "0:"
        cTBox.SelStart = 2
        '
    Else
    '
      Select Case KeyAscii
        '
        Case 8
          ' Backspace erlaubt
          '
        Case 13
          ' bei Return Formatieren:
          'Bei direktem Return in cTBox funktioniert es nur, wenn es auf der 
          ' Form KEIN StandardCommand gibt.
          'Mit StandardCommand erfolgt auch kein Validate von cTBox
          'wg möglichem Copy + Paste etwas aufwendiger
          dTime = Abs(Val(Replace(Replace(cTBox.text, ":", "."), ",", ".")))
          'Zeit normieren (0:60 in 1:00 etc):
          dTime = Int(dTime) + ((dTime - Int(dTime)) * 100 / 60)
          dTime = Round(dTime, 9)
          dTime = Int(dTime) + ((dTime - Int(dTime)) * 60 / 100)
          cTBox.text = Replace(Replace(Format(dTime, "00.00"), ",", ":"), ".", _
            ":") 'doppeltes Replace wg "." oder "," als DecTrenner
          cTBox.SelStart = Len(cTBox)
          'kein Signal(wenn kein StandardCommand):
          KeyAscii = 0
          '
        Case Asc("0") To Asc("9"), Asc(":")
          '
          If (kPos <> 0 And kPos > cTBox.SelStart) Or _
            kPos = 0 Then
            'Vorkomma
            If kPos = 0 Then
                lVork = Len(cTBox) + 1 '+1(das neue Zeichen)
            Else
                lVork = kPos '- 1+1 = -1(Komma)+1(das neue Zeichen)
            End If
            '
            If lVork = 2 And Len(cTBox) = 1 Then
              '
              If KeyAscii = Asc(":") Then
                cTBox = cTBox & Chr(KeyAscii)
              Else
                cTBox = cTBox & Chr(KeyAscii) & ":"
              End If
              cTBox.SelStart = 3
              KeyAscii = 0
              '
            ElseIf lVork >= 3 Then
              ' als 3.Zeichen nur ":" zulassen
              Select Case KeyAscii
                '
                Case Asc(":")
                '
                Case Else
                  KeyAscii = 0
              End Select
            End If
          ElseIf kPos <> 0 And kPos = cTBox.SelStart Then
            '1.Nachkomma
            Select Case KeyAscii
              '
              Case Asc("0") To Asc("5")
              '
              Case Else
                KeyAscii = 0
            End Select
          ElseIf kPos <> 0 And kPos + 1 = cTBox.SelStart Then
            '2.Nachkomma
          Else
            '3.Nachkomma
            KeyAscii = 0
          End If
          '
        Case Else
          KeyAscii = 0
      '
      End Select
      '
    End If
'
End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Bestimmes Eingabeformat erzwingen648Zwackel31.08.05 11:27
Re: Bestimmes Eingabeformat erzwingen436wincnc31.08.05 11:38
Re: Bestimmes Eingabeformat erzwingen421Zwackel31.08.05 11:45
Re: Bestimmes Eingabeformat erzwingen441MCMoses31.08.05 11:39
Re: Bestimmes Eingabeformat erzwingen431MCMoses31.08.05 11:42
Re: Bestimmes Eingabeformat erzwingen495VestMerkur01.09.05 13:27
Re: Bestimmes Eingabeformat erzwingen469Zwackel01.09.05 14:02

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel