Thema: vb.net Fragen

  1. #1
    Avatar von Tiago
    Registriert seit
    03.03.2011
    Ort
    Irgendwo in den unendlichen Weiten der Pixel und Polygone
    Beiträge
    29.359
    Konsolen
    Switch PS4 Wii U PS Vita 3DS Wii PSP DS PS3 GC GBA N64 SNES GB
    SNES Mini, PlayStation, PC

    vb.net Fragen

    Moin!

    Für die Schule muss ich mich derzeit mit vb.net auseinandersetzen und ich würde gerne ein Ereignis ausführen, SOWOHL, wenn ich das Textfeld via Enter-Taste verlasse, ALS AUCH, wenn ich einfach ins nächste Feld oder irgendwoanders hinklicke.

    Konkret geht es um ein Feld, bei dem hinter der eingegebenen Zahl dann automatisch "kw/h" eingeblendet werden soll. Also der Nutzer tippt "10" ein und im Feld erscheint dann "10 kw/h".

    Bislang habe ich das versucht so zu lösen:

    Code:
        Private Sub txtZähler1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtZähler1.KeyPress
               If Asc(e.KeyChar) = 13 Then
                mZähler1 = CSng(txtZähler1.Text)
                txtZähler1.Text = Format(CSng(txtZähler1.Text), "#########0.00 kw/h")
                txtDatum2.Focus()
            End If
        End Sub
    Damit wäre dann die Weitergabe via Enter geklärt. Anschließend habe ich dann ein Sub mit Leave erstellt, die beiden kommen sich dann aber in die quere, weil die Geschichte dann zwei mal ausgelöst wird und das Programm mir eine Errormeldung ausspuckt, weil es versucht das "kw/h" mit in die Variable zu packen.

    Ist mein Problem in etwa klar geworden?



    Eine zweite Frage wäre, wie ich ein bestimmtes Textfeld in ein Datumformat "zwingen" kann, also dass eine Eingabe ausschließlich folgendermaßen erfolgen kann: "dd.mm.yyyy".

    Ich habe das so versucht:

    Code:
    Private Sub txtDatum1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDatum1.KeyPress
            If Asc(e.KeyChar) = 13 Then
                If txtDatum1.Text = Format(Val(txtDatum1.Text), "00.00.0000") = True Then
                    txtZähler1.Focus()
                Else
                    MessageBox.Show("Bitte folgendes Format angeben: dd.mm.yyyy.", "Fehlermeldung")
                End If
            End If
        End Sub
    Aber das führt zu keinem brauchbaren Ergbenis... habe auch schon die Nullen durch Rauten ersetzt, aber auch dann akzeptiert er nicht "irgendeine Zahl" sondern konkret Nullen und Rauten.
    Geändert von Tiago (28.01.2017 um 13:10 Uhr)


  2. #2
    Avatar von Nintendofan
    Registriert seit
    19.09.2003
    Ort
    NRW
    Beiträge
    2.234
    Konsolen
    Switch PS4 Wii U 3DS Wii XBOX 360 GC GBA N64 SNES GB NES
    Atari VSC2600
    Entwickle zwar nichts mit vb.net, nur teilweise mal etwas VBA in Excel, aber da gibt es ja auch Parallelen.

    Zu deinem ersten Problem: Ggf. eine Variable einbauen? Aktuell werden ja beide Funktionen ausgelöst, daher ggf. eine Variable (Boolean) nutzen, die nach dem Ausführen der ersten Funktion auf true gesetzt wird. Diese kannst du dann bei der 2. Funktion abfragen und damit Funktion 2 überspringen, wenn 1 bereits gelaufen ist.

    Zum zweiten Problem: Regular Expression googlen (RegEx). Damit kannst du die gültigen Muster definieren.
    Geändert von Nintendofan (28.01.2017 um 20:09 Uhr)

  3. #3
    Avatar von Tiago
    Registriert seit
    03.03.2011
    Ort
    Irgendwo in den unendlichen Weiten der Pixel und Polygone
    Beiträge
    29.359
    Konsolen
    Switch PS4 Wii U PS Vita 3DS Wii PSP DS PS3 GC GBA N64 SNES GB
    SNES Mini, PlayStation, PC
    Danke für den Tipp! Das mit der Boolean-Variable hat funktioniert. Habe die Variable mit GotFocus auf False gestellt und bei einem Enter-Druck auf True. Die LostFocus-Funktion tritt dann nur ein, wenn die Variable nicht auf True steht.

    Das andere war mir im Moment allerdings noch etwas zu viel Arbeit mich da reinzulesen. Werde das aber mal im Hinterkopf behalten, danke!


  4. #4
    Avatar von Nintendofan
    Registriert seit
    19.09.2003
    Ort
    NRW
    Beiträge
    2.234
    Konsolen
    Switch PS4 Wii U 3DS Wii XBOX 360 GC GBA N64 SNES GB NES
    Atari VSC2600
    Das mit der Regulär Expression ist gar nicht so kompliziert, wenn man das Muster erstmal richtig definiert hat. Hier ist ein Beispiel, direkt für eine Datumsvalidierung, die alles von 01.01.1800 bis 31.12.2099 zulässt (allerdings auch nicht vorhandene Daten wie 30.02.).

    http://www.vbarchiv.net/tipps/tipp_1...uefen-net.html

    Das Muster sieht hier etwas wild aus, deckt aber ab, dass der Monat z.B. Nur von 01 bis 12 gehen darf. Im Grunde wird nach der Patterndefinition nur noch verglichen, ob der Eingabetext dem Muster entspricht. Ließe sich natürlich auch noch etwas einfacher umsetzen, wenn man das Format nicht weiter prüfen möchte, sondern einfach nur Zahlen und Punkte zulassen möchte.

    Edit: In dem Beispiel müsste es am Ende des Ausdrucks wohl (18|19|20) bzw. (18-20) heißen statt (18|20), da sonst ein Jahrhundert fehlen würde^^
    Geändert von Nintendofan (29.01.2017 um 12:27 Uhr)

  5. #5
    Avatar von Tiago
    Registriert seit
    03.03.2011
    Ort
    Irgendwo in den unendlichen Weiten der Pixel und Polygone
    Beiträge
    29.359
    Konsolen
    Switch PS4 Wii U PS Vita 3DS Wii PSP DS PS3 GC GBA N64 SNES GB
    SNES Mini, PlayStation, PC
    Danke nochmal für die Mühe. Ich habe übrigens gemerkt, dass das mit der Variable gar nicht nötig ist, wenn ich auf die Formatierung bei der Enter-Taste verzichte. "Leave" wird nämlich immer ausgeführt, egal ob Enter, Tab oder Mausklick.


Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 04.08.2015, 08:07
  2. Fragen über Fragen!
    Von Seven im Forum Nintendo
    Antworten: 5
    Letzter Beitrag: 12.05.2004, 21:01
  3. Fragen über Fragen ... zu Paint Shop Pro 8
    Von Wayne im Forum Off Topic
    Antworten: 3
    Letzter Beitrag: 30.10.2003, 13:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Anmelden

Anmelden