Thema: vb.net Fragen
-
28.01.2017, 13:07 #1
- Registriert seit
- 03.03.2011
- Ort
- Irgendwo in den unendlichen Weiten der Pixel und Polygone
- Beiträge
- 29.359
- Konsolen
-
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
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
-
28.01.2017, 20:05 #2
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.
-
29.01.2017, 12:07 #3
- Registriert seit
- 03.03.2011
- Ort
- Irgendwo in den unendlichen Weiten der Pixel und Polygone
- Beiträge
- 29.359
- Konsolen
-
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!
-
29.01.2017, 12:23 #4
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^^
-
29.01.2017, 12:44 #5
Ähnliche Themen
-
Fragen über Fragen zu Spielkonsolen "NINTENDO 3DS XL vs. NINTENDO Wii U Premium!
Von Simplex im Forum NintendoAntworten: 13Letzter Beitrag: 04.08.2015, 08:07 -
Fragen über Fragen!
Von Seven im Forum NintendoAntworten: 5Letzter Beitrag: 12.05.2004, 21:01 -
Fragen über Fragen ... zu Paint Shop Pro 8
Von Wayne im Forum Off TopicAntworten: 3Letzter Beitrag: 30.10.2003, 13:02