VisualBasic Textbox "on the fly" o.ä. formatieren

  • Ersteller Ersteller EnHoE007
  • Erstellt am Erstellt am
E

EnHoE007

Gast
Hallo Leute

Ich habe seit ein paar Tagen begonnen mit VB 2010 zu programmieren.

Leider habe ich ein Problem, welches ich nicht lösen kann. Ich hab in diversen Foren, google. ect. gesucht, zwar was gefunden aber ich kapiers irgendwie total nicht.


Ich möchte folgendes:

User gibt einen Wert in eine Textbox ein, diese sollte nach der eingabe formatiert werden.

Bsp:

User gibt ein 2254518

formatiert soll es so aussehen

225-45-18


Ich hab was zusammengecodet aber das geht vorne und hinten nicht.

Private Sub t_pneu_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles t_pneu.TextChanged

Dim tmp As String

tmp = 6

If t_pneu.Text = tmp Then

t_pneu.Text = Format(t_pneu.Text, "@@@-@@-@@")

End If

End Sub

Ich weiss es ist nicht korrekt, aber kann mir bitte jemand helfen?

Danke und Gruss

EnHoE007
 
Denkbare Lösung zu deinem Problem:
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Const iInsert1 As Integer = 3 '3. Stelle
Const iInsert2 As Integer = 6 '6. Stelle

If TextBox1.Text.Length = iInsert1 Then
TextBox1.Text += "-"
TextBox1.SelectionStart = iInsert1 + 1
End If
If TextBox1.Text.Length = iInsert2 Then
TextBox1.Text += "-"
TextBox1.SelectionStart = iInsert2 + 1
End If
End Sub

Solltest dann aber deine Textbox1.MaxLength auf 9 setzen.
 
Zuletzt bearbeitet:
Es kommt drauf an, ob die Eingabe immer eine gleiche Länge hat. Sprich es sind immer 7 Zahlen wie in deinem Beispiel.
Dann kannst du ein Steuerelement nutzen, welches MaskedTextBox heißt. Dort kannst du das dann ohne Probleme im Eigenschaftsfenster (Designer) einstellen.

Eine weitere und vlt. auch flexiblere und elegantere Lösung wäre der Einsatz von RegEx.
Es schadet auf keinen Fall sich das mal an zu gucken.
 
Wow super,

danke vielmals!

Ich werde beide Lösungen heute Abend sofort versuchen.

/edit: Es sind immer 7 Zeichen
 
Leute noch eine Frage

Ich möchte ein Array machen und dass bei jedem klick auf einen Button quasi zum nächsten Wert im Array gesprungen wird.

Was ist daran falsch?

'Array und Loop
Dim Buchstabe(0 To 2) As String
Buchstabe(0) = "ABC" : Buchstabe(1) = "DEF" : Buchstabe(2) = "GHI"

tb_wie.Text = Buchstabe(0) + 1

Ich werde mir am SA ein Buch kaufen :)

thx a lot
 
Also wenn du dir ein Buch kaufen willst, dann hol dir ein C# Buch. ;)

Entschuldige, ich bin heute ziemlich groggy, aber will dir hier schon antworten, daher habe ich einfach mal eine Beispiel Lösung gemacht, welche aber zugegeben nicht elegant gelöst ist, aber dir auch nur einen Ansatz bzw. Anreiz auf eine eigene elegantere Lösung geben soll. ;)

Denn wer nur Copy & Past spielt, lernt auch nichts. ;)


Code:
Public Class Form1

    Dim Buchstabe(0 To 2) As String
    Dim count As Integer = 0


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Buchstabe(0) = "ABC" : Buchstabe(1) = "DEF" : Buchstabe(2) = "GHI"

        MsgBox(Buchstabe(count))

        count += 1

        If count >= Buchstabe.Length Then
            count = 0
        End If

    End Sub
End Class
 
Ach mist, ich bekomms nicht zum Laufen

Ich habe folgendes Codiert

Code:
        Dim Buchstabe(4) As String
        Dim count As Integer = 0

        Buchstabe(0) = "A"
        Buchstabe(1) = "B"
        Buchstabe(2) = "C"
        Buchstabe(3) = "D"
        Buchstabe(4) = "E"


        For i = 0 To Buchstabe.Length - 1

            tb_wie.Text = Buchstabe(i)
            count += 1

        Next

Was ich nicht verstehe, warum steht in "tb_wie.Tex" wenn ich den Button klicke nur der Buchstabe E?

Ich möchte auch nach jedem klicken auf den Button einen anderen Buchstaben haben. zmb A (klick Button) B usw.

Ich vermute ich brauche quasi ein " count Buchstabe(i) by one" Statement. Dazu brauche ich auch einen counter (wie aus dem Beispiel von HaGGi) aber ich schnalls nicht.

Kann mit jemand bitte einen Tipp geben?
 
Okay, ein Tipp, keine For-Schleife.

Die läuft komplett durch und stoppt nicht zwischen durch... guck dir mal die For-Schleife bei MSDN an.
Das was du realisieren möchtest, musst du direkt auf den Index des Arrays mit einen eigenen Counter zugreifen, den du selber hoch zählst.

Vielleicht hilft dir das hier:
Sprachreferenz zu Visual Basic
 
Sehr warscheinlich gehe ich auf die Nerven aber ich habs "zum teil"

Code:
        Do Until count = Buchstabe.Length

            MsgBox(Buchstabe(count))

            'tb_wie.Text = Buchstabe(count)

            count += 1

        Loop

        If count >= Buchstabe.Length Then
            count = 0
        End If

Wenn ichs so mache funktioniert es tadellos aber in einem PopupFenster.
Wenn ich das tb_wie.Text = Buchstabe(count) mache Habe ich nur den letzten Buchstaben in der Textbox.

Ich wär froh wenn mir jemand die Lösung geben würd, ich weiss wirklich nicht weiter!

Danke
 
Nervst nicht, Forum ist dazu da Fragen zu stellen.

Okay, analysieren wir das mal was da genau passiert...

Code:
' durchlaufe solange die Schleife bis count = Länge des Arrays ist
Do Until count = Buchstabe.Length

	' zeige den Inhalt des Arrays an der Stelle count
	MsgBox(Buchstabe(count))

	'tb_wie.Text = Buchstabe(count)

	' count Variable um 1 erhöhen
	count += 1
Loop

' wenn dann count = 3 ist, bricht die schleife ab und der Code wird hier weiter abgearbeitet


' wenn count größer oder gleich die Länge des Arrays ist...
If count >= Buchstabe.Length Then
	' ... dann setz count auf 0
	count = 0
End If

Nun ist aber das ding, das deine Schleife nur unterbrochen wird, weil da die MsgBox() ist sonst würde er da auch durch rattern. Daher musst du eine Lösung schaffen die ohne Schleife geht...
Eigentlich wäre das was ich dir gepostet hatte okay.
Versuch mal dort zu verstehen, was genau passiert.

Hier ist er noch mal, leicht abgeändert, dass du deine TextBox hast:
Code:
Public Class Form1

    Dim Buchstabe() As String = {"ABC", "DEF", "GHI"}
    Dim count As Integer = 0


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        tb_wie.Text = Buchstabe(count)

        count += 1

        If count >= Buchstabe.Length Then
            count = 0
        End If

    End Sub
End Class
 
Cool HaGGi, danke vielmals, nun funktioniert es.

Ich wusste garnicht dass man diese beiden Variabeln:

Dim Buchstabe() As String = {"ABC", "DEF", "GHI"}
Dim count As Integer = 0

ausserhalb der Prozedur deklarieren kann :S

Heisst denn dies demzufolge, dass es quasi "globale" Variabeln sind und innerhalb von der Klasse in verschiedenen Prozeduren benutzt werden können?!

Nochmals herzlichen Dank, werde am SA entweder das C# oder VB Buch holen.

Gruss

EnHoE007
 
Ja, die beiden Variablen sind dann in der ganzen Klasse (hier Formular) abrufbar und manipulierbar.
Die beiden werden deklariert und auch sofort initialisiert.

Du kannst Variablen außerhalb von Methoden deklarieren und auch initialisieren und dann stehen sie für alle Methoden in der gleichen Klasse zur Verfügung.
Du kannst ihnen auch den Modifizierer "public" geben, dann sind sie auch außerhalb der Klasse sichtbar oder du gibst ihnen explizit "private" dann sind sie so wie jetzt nur in der Klasse sichtbar in welcher sie deklariert werden.
 
Zurück
Oben