Textfeld-Überwachung - prüfen, markieren und Fokus nicht weiterreichen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von jan99.

    Textfeld-Überwachung - prüfen, markieren und Fokus nicht weiterreichen

    Moin !

    auch hier nochmal ein Punkt der in VB6 schon immer sehr aufwendig war und vielleicht hat sich in .net etwas geändert.

    In unserem Bereich wird viel mit Zahlenwerten gearbeitet. Nun möchte ich überwachen das auch nur diese eingegeben werden, in einem Wertebereich liegen und wenn all das nicht erfüllt wird, dann soll es eine Meldung geben und das Textfeld farblich hinterlegt werden.

    Damit nicht einfach zur Tagesordnung übergegangen wird soll verhindert werden, dass der Fokus weitergeben wird.

    Ist das einfacher geworden oder gibt es Hilfsmittel?

    Gruß Jan

    PS: da in einem Formular oftmals mehrere Textfelder vorkommen sollten die am besten alle mit einer Funktion kontrolliert werden können. Die Namen sähen so aus:
    txt_UTM_Rechts_Min
    txt_UTM_Rechts_Max
    txt_UTM_Hoch_Min
    txt_UTM_Hoch_Max
    @jan99 Nimm ein NumericUpDown, das macht das alles intern.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Noch einfacher kannst du es mit einem "NumericUpDown" darstellen.
    Dieses Steuerelement lässt generell nur Zahlen zu und du hast über den Designer bereits die Möglichkeit einen Minimum/Maximum Wert anzugeben.
    Zusätzlich wieviele Dezimalstellen, 100er Punkt usw.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Das, was RodFromGermany gesagt hat, würde ich Dir ebenso raten. Eingaben validieren geht zwar noch, aber wenn es dann schon zu Ranges etc. kommt, ist es zu kompliziert. Dafür ist die TextBox eigentlich nicht konzipiert.
    Keine Ahnung, ob die MaskedTextBox hier was bringt, habe die nie benutzt, aber die soll anscheinend auch für sowas geeignet sein.

    Nichts desto Trotz ist ein NumericUpDown die beste Lösung.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Moin !

    erst einmal vielen Dank. Ich habe mir einige Gedanken gemacht - aber an einer Stelle komme ich nicht weiter...

    VB.NET-Quellcode

    1. Private Sub txt_GK_Rechts_Min_Validating(sender As Object, e As ComponentModel.CancelEventArgs) Handles txt_GK_Rechts_Min.Validating
    2. Vali_Rechtswert(Me)
    3. End Sub
    4. Private Sub Vali_Rechtswert(tb As TextBox)
    5. If Not IsNumeric(tb.Text) Then
    6. MsgBox("Bitte eine Nummer eingeben!")
    7. ' hier würde ich ein e.cancel=true setzen wollen - wird aber nicht angeboten
    8. ElseIf CDbl(tb.Text) < 100 Then
    9. MsgBox("Zahl größer gleich 100")
    10. Else
    11. String.Format("{0:0.000}", tb.Text)
    12. End If
    13. End Sub
    14. End Class


    Wie auskommentiert dargestellt würde ich gerne dort die Fokusweitergabe unterbinden. Es gib aber kein e.!

    Kann mir einer sagen, was ich falsch gemacht habe?

    Gruß Jan

    PS: habe die anderen Postings gerade erst gesehen. Aber ist das NumericUpDown so unbedingt geeignet für Fenster in denen Koordinaten eingegeben werden sollen ?

    jan99 schrieb:

    angeboten
    Dann musst Du es als Parameter weiterreichen:

    VB.NET-Quellcode

    1. Private Sub txt_GK_Rechts_Min_Validating(sender As Object, e As ComponentModel.CancelEventArgs) Handles txt_GK_Rechts_Min.Validating
    2. Vali_Rechtswert(sender, e) ' dies hier
    3. End Sub
    Allerdings wurde Dir empfohlen, keine TextBox zu verwenden :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nochmal: Eine TextBox ist für dieses Vorhaben sehr schlecht geeignet. Die VB6-Funktionen kommen noch dazu, die sollte man nicht mehr nutzen.
    Böse Funktionen vermeiden

    Nimm' ein NumericUpDown dafür. Übrigens solltest Du Dir die Naming Conventions/Guidelines von Microsoft anschauen. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Moin !

    ich habe den Rat soweit übernommen, dass ich auf NummericDown umgestellt habe.

    Dennoch wäre es gut die Funktion zum laufen zu bekommen um andere Eingaben abfangen zu können.

    Was mir in meinem Beispielcode irgendwie fehlt ist der Zugriff auf das auslösende Element selber. Das von mir als "tb.Text" bezeichnete Element gibt es da nicht.

    Kann mir einer nochmal helfen?

    Gruß Jan
    Was für

    jan99 schrieb:

    andere Eingaben
    meinst Du?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!