Hallo liebe Programmiererkollegen,
ich habe bisher bei den meisten Textboxen, wo ein Anwender Zahlen eingeben kann, diese manuell auf Plausibilität geprüft.
Bei so mancher Anwendung mit hunderten Eingeabefeldern wird das aber etwas unüberschaubar und Codelastig.
Daher habe ich mir eine Function geschrieben die das für mich mit nur einer Codezeile erledigt.
Den Code möchte ich der Community gerne zur Verfügung stellen.
Man braucht eine Textbox. In meinem Beispiel
Beispiel: Der Anwender darf in diese Textbox nur einen Wert zwischen 1 und 1000 eingeben. Gibt der Anwender eine niedrigere Zahl ein, dann wird zumindest 1 übergeben, gibt der Anwender eine höhere Zahl als 1000 ein, dann wird 1000 übergeben. Die Eingabe wird auch auf Kommas, Punkte etc. überprüft um z.B. die versehentliche Eingabe von zwei Punkten oder zwei Kommas abzufangen. Wenn der Anwender einen ungültigen Wert eingibt, dann erscheint kurz im Textfeld der Hinweis über minimum und maximum Wert in Rot.
Hier der Code der Funktion:
Um eine bestimmte Zeit abzuwarten ohne die Anwendung einfrieren zu lassen, verwende ich meine eigene Funktion "Warte". Hier der Code. Natürlich kann jeder seinen eigene "Wartecode" verwenden. Aber thread.sleep() kommt für mich nicht in Frage.
PS: Numeric up/down Felder sind keine wirkliche optische Alternative .
Der Code oben ist womöglich nicht 100% astreines VB.NET, sondern möglicherweise VB6 lastig. Daher habe ich den Code nicht unter Tipps und Tricks gepostet. Sollte der Code aber einigermaßen "annehmbar" sein, dann darf dieser Beitrag gerne verschoben werden.
LG Roland
ich habe bisher bei den meisten Textboxen, wo ein Anwender Zahlen eingeben kann, diese manuell auf Plausibilität geprüft.
Bei so mancher Anwendung mit hunderten Eingeabefeldern wird das aber etwas unüberschaubar und Codelastig.
Daher habe ich mir eine Function geschrieben die das für mich mit nur einer Codezeile erledigt.
Den Code möchte ich der Community gerne zur Verfügung stellen.
Man braucht eine Textbox. In meinem Beispiel
Textbox_Preiseingabe
.Beispiel: Der Anwender darf in diese Textbox nur einen Wert zwischen 1 und 1000 eingeben. Gibt der Anwender eine niedrigere Zahl ein, dann wird zumindest 1 übergeben, gibt der Anwender eine höhere Zahl als 1000 ein, dann wird 1000 übergeben. Die Eingabe wird auch auf Kommas, Punkte etc. überprüft um z.B. die versehentliche Eingabe von zwei Punkten oder zwei Kommas abzufangen. Wenn der Anwender einen ungültigen Wert eingibt, dann erscheint kurz im Textfeld der Hinweis über minimum und maximum Wert in Rot.
Hier der Code der Funktion:
VB.NET-Quellcode
- ''' <summary>
- ''' Gibt aus einer Textbox immer einen gültigen Double-Wert zwischen minimum und maximum zurück, egal was der User eingegeben hat
- ''' </summary>
- ''' <param name="TextboxControl"></param>
- ''' <param name="minimum"></param>
- ''' <param name="maximum"></param>
- ''' <returns></returns>
- Public Function PruefeZahl_CDBL(TextboxControl As TextBox, minimum As Double, maximum As Double) As Double
- Dim Inhalt As String = TextboxControl.Text
- Dim Nachricht As String = ""
- Dim AnzahlZeichen As Integer
- If Trim(Inhalt) = "" Then Inhalt = minimum.ToString : Nachricht = "leer" : GoTo MeldenUndZurueckgeben 'Prüfen ob der Inhalt leer ist
- If Not IsNumeric(Inhalt) Then Inhalt = minimum.ToString : Nachricht = "leer" : GoTo MeldenUndZurueckgeben 'Prüfen ob der Inhalt numerisch ist
- 'Prüfen ob zwei Punkte enthalten sind, dann ungültig
- AnzahlZeichen = 0
- For i As Integer = 1 To Len(Inhalt)
- If Mid(Inhalt, i, 1) = "." Then AnzahlZeichen += 1
- Next i
- If AnzahlZeichen > 1 Then Inhalt = minimum.ToString : Nachricht = "falsch" : GoTo MeldenUndZurueckgeben
- 'Prüfen ob zwei Kommas enthalten sind, dann ungültig
- AnzahlZeichen = 0
- For i As Integer = 1 To Len(Inhalt)
- If Mid(Inhalt, i, 1) = "," Then AnzahlZeichen += 1
- Next i
- If AnzahlZeichen > 1 Then Inhalt = minimum.ToString : Nachricht = "falsch" : GoTo MeldenUndZurueckgeben
- If InStr(Inhalt, ",") = 0 Then Inhalt = Replace(Inhalt, ".", ",") 'Einen Punkt durch ein Komma ersetzen, wenn kein zusätzliches Komma existiert
- If CDbl(Inhalt) < minimum Then Inhalt = minimum.ToString : Nachricht = minimum.ToString + " - " + maximum.ToString : GoTo MeldenUndZurueckgeben 'Prüfen ob Minimum unterschritten wurde
- If CDbl(Inhalt) > maximum Then Inhalt = maximum.ToString : Nachricht = minimum.ToString + " - " + maximum.ToString : GoTo MeldenUndZurueckgeben 'Prüfen ob Maximum überschritten wurde
- MeldenUndZurueckgeben:
- If Nachricht <> "" Then
- Dim BackColorAlt As Color = TextboxControl.BackColor
- Dim ForeColorAlt As Color = TextboxControl.ForeColor
- TextboxControl.BackColor = Color.Red
- TextboxControl.ForeColor = Color.White
- TextboxControl.Text = Nachricht
- Application.DoEvents()
- Warte(0.5)
- TextboxControl.BackColor = BackColorAlt
- TextboxControl.ForeColor = ForeColorAlt
- End If
- TextboxControl.Text = Inhalt
- Return CDbl(Inhalt)
- End Function
Um eine bestimmte Zeit abzuwarten ohne die Anwendung einfrieren zu lassen, verwende ich meine eigene Funktion "Warte". Hier der Code. Natürlich kann jeder seinen eigene "Wartecode" verwenden. Aber thread.sleep() kommt für mich nicht in Frage.
VB.NET-Quellcode
- ''' <summary>
- ''' Wartet eine Anzahl an Sekunden
- ''' </summary>
- ''' <param name="Sekunden">Sekunden als Double</param>
- ''' <remarks></remarks>
- Public Sub Warte(Sekunden As Double)
- Dim ZeitSpanne As Double
- Dim Start As Double
- ZeitSpanne = Sekunden / 100000
- Start = DateTime.Now.ToOADate() ' Anfangszeit setzen.
- Do While DateTime.Now.ToOADate() < Start + ZeitSpanne
- Application.DoEvents() ' Steuerung an andere Prozesse abgeben
- Loop
- End Sub
PS: Numeric up/down Felder sind keine wirkliche optische Alternative .
Der Code oben ist womöglich nicht 100% astreines VB.NET, sondern möglicherweise VB6 lastig. Daher habe ich den Code nicht unter Tipps und Tricks gepostet. Sollte der Code aber einigermaßen "annehmbar" sein, dann darf dieser Beitrag gerne verschoben werden.
LG Roland
Liebe Grüße
Roland Berghöfer
Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
Roland Berghöfer
Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at