MaskedTextBox - beim eintragen in die Box den Text formatieren

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Siestaeg.

    MaskedTextBox - beim eintragen in die Box den Text formatieren

    Hallo,

    ich habe ein großes Problem. Ich habe eine Textbox die die User ausfüllen sollen und der Übersichtshalber soll der eingegebene Text so formatiert werden das der User 100000000000 eingibt und die Tausender Trennpunkte automatisch erscheinen 10.000.000.000. Die Werteeingaben liegen dabei von 10 .000 bis 100 Mio.

    Wie kann ich das erreichen???? Oder ist die MaskedTexBox der falsche Weg?

    MfG
    varo.biker
    wie wärs mit so was


    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    2. If IsNumeric(TextBox1.Text) Then
    3. TextBox1.Text = Format(CDec(TextBox1.Text), "###,##")
    4. TextBox1.SelectionStart = Len(TextBox1.Text)
    5. TextBox1.ScrollToCaret()
    6. End If
    7. End Sub

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Siestaeg“ ()

    :( Leider funktioniert es nicht ganz so wie ich es mir denke. Zwar funktioniert die Tausender Trennung aber ich habe das Textfeld so formatiet das es rote Zahlen anzeigen soll - jedoch erscheinen graue. Mein Code schaut so aus:

    VB.NET-Quellcode

    1. Private Sub frm_frequenzbereich_Activated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Activated
    2. '#### eintragen der Start- /Endfrequenz aus der Messdatei in die maskierten Textboxen
    3. tbx_form_freq_bereich_Htxt_min.Text = Format(CDec(dbl_frq_min), "###,##")
    4. txt_frm_freq_ber_htxt_freq_max.Text = Format(CDec(dbl_frq_max), "###,##")
    5. End Sub



    jetzt frag ich mich was ich falsch mache,


    außerdem bekomme ich seit der Formatierung immer folgenden Fehler im Direktfenster angezeigt:

    "Eine Ausnahme (erste Chance) des Typs "System.FormatException" ist in mscorlib.dll aufgetreten."

    kenn es sein dass das daher stammt das ich ja mehrere Felder untereinander habe und diese mit der o.g. IF Then Schleife jeweils formatiere.

    der Code sieht so dazu aus:

    VB.NET-Quellcode

    1. '### beim aktivieren der Checkbox1 werden die dahinter gelegenen Texteingabefelder aktiviert #####
    2. Private Sub cbx_form_freq_bereich_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbx_form_freq_bereich_1.Click
    3. If cbx_form_freq_bereich_1.Checked = True Then
    4. txt_Freq_start_cbx1.Enabled = True
    5. txt_Freq_ende_cbx1.Enabled = True
    6. Else
    7. txt_Freq_start_cbx1.Enabled = False
    8. txt_Freq_ende_cbx1.Enabled = False
    9. End If
    10. End Sub
    11. ' #### Formatierung des Eingabefeldes Freq. Beginn bei CheckBox 1 in 10.000.000
    12. Private Sub txt_Freq_start_cbx1min_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Freq_start_cbx1.TextChanged
    13. If IsNumeric(txt_Freq_start_cbx1.Text) Then
    14. txt_Freq_start_cbx1.Text = Format(CDec(txt_Freq_start_cbx1.Text), "###,##")
    15. txt_Freq_start_cbx1.SelectionStart = Len(txt_Freq_start_cbx1.Text)
    16. txt_Freq_start_cbx1.ScrollToCaret()
    17. End If
    18. End Sub
    19. ' #### Formatierung des Eingabefeldes Freq. Ende bei CheckBox 1 in 10.000.000
    20. Private Sub txt_Freq_end_cbx1max_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Freq_ende_cbx1.TextChanged
    21. If IsNumeric(txt_Freq_ende_cbx1.Text) Then
    22. txt_Freq_ende_cbx1.Text = Format(CDec(txt_Freq_ende_cbx1.Text), "###,##")
    23. txt_Freq_ende_cbx1.SelectionStart = Len(txt_Freq_ende_cbx1.Text)
    24. txt_Freq_ende_cbx1.ScrollToCaret()
    25. End If
    26. End Sub
    27. '### beim aktivieren der Checkbox2 werden die dahinter gelegenen Texteingabefelder aktiviert #####
    28. Private Sub cbx_form_freq_bereich_2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbx_form_freq_bereich_2.CheckedChanged
    29. If cbx_form_freq_bereich_2.Checked = True Then
    30. txt_Freq_start_cbx2.Enabled = True
    31. txt_Freq_ende_cbx2.Enabled = True
    32. Else
    33. txt_Freq_start_cbx2.Enabled = False
    34. txt_Freq_ende_cbx2.Enabled = False
    35. End If
    36. End Sub
    37. ' #### Formatierung des Eingabefeldes Freq. Beginn bei CheckBox 2 in 10.000.000
    38. Private Sub txt_Freq_start_cbx2min_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Freq_start_cbx2.TextChanged
    39. If IsNumeric(txt_Freq_start_cbx2.Text) Then
    40. txt_Freq_start_cbx2.Text = Format(CDec(txt_Freq_start_cbx2.Text), "###,##")
    41. txt_Freq_start_cbx2.SelectionStart = Len(txt_Freq_start_cbx1.Text)
    42. txt_Freq_start_cbx2.ScrollToCaret()
    43. End If
    44. End Sub
    45. ' #### Formatierung des Eingabefeldes Freq. Ende bei CheckBox 2 in 10.000.000
    46. Private Sub txt_Freq_end_cbx2max_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Freq_ende_cbx2.TextChanged
    47. If IsNumeric(txt_Freq_ende_cbx2.Text) Then
    48. txt_Freq_ende_cbx2.Text = Format(CDec(txt_Freq_ende_cbx2.Text), "###,##")
    49. txt_Freq_ende_cbx2.SelectionStart = Len(txt_Freq_ende_cbx2.Text)
    50. txt_Freq_ende_cbx2.ScrollToCaret()
    51. End If
    52. End Sub
    53. '### beim aktivieren der Checkbox3 werden die dahinter gelegenen Texteingabefelder aktiviert #####
    54. Private Sub cbx_form_freq_bereich_3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbx_form_freq_bereich_3.CheckedChanged
    55. If cbx_form_freq_bereich_3.Checked = True Then
    56. txt_Freq_start_cbx3.Enabled = True
    57. txt_Freq_ende_cbx3.Enabled = True
    58. Else
    59. txt_Freq_start_cbx3.Enabled = False
    60. txt_Freq_ende_cbx3.Enabled = False
    61. End If
    62. End Sub
    63. ' #### Formatierung des Eingabefeldes Freq. Beginn bei CheckBox 3 in 10.000.000
    64. Private Sub txt_Freq_start_cbx3min_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Freq_start_cbx3.TextChanged
    65. If IsNumeric(txt_Freq_start_cbx3.Text) Then
    66. txt_Freq_start_cbx3.Text = Format(CDec(txt_Freq_start_cbx3.Text), "###,##")
    67. txt_Freq_start_cbx3.SelectionStart = Len(txt_Freq_start_cbx3.Text)
    68. txt_Freq_start_cbx3.ScrollToCaret()
    69. End If
    70. End Sub
    71. ' #### Formatierung des Eingabefeldes Freq. Ende bei CheckBox 3 in 10.000.000
    72. Private Sub txt_Freq_end_cbx3max_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Freq_ende_cbx3.TextChanged
    73. If IsNumeric(txt_Freq_ende_cbx3.Text) Then
    74. txt_Freq_ende_cbx3.Text = Format(CDec(txt_Freq_ende_cbx3.Text), "###,##")
    75. txt_Freq_ende_cbx3.SelectionStart = Len(txt_Freq_ende_cbx3.Text)
    76. txt_Freq_ende_cbx3.ScrollToCaret()
    77. End If
    78. End Sub


    Vielleicht kann ich das ganze ja in eine verkettete Anweisung bringen da ich ja das Aktivschalten der einzelnen Checkboxen und das befüllen der Textfelder mit Zahlen überprüfen muß und die entsprechenden Berechnungen für die einzelnen Frequenzbereiche anstoßen muß. Wie ich das realisieren soll weiß ich auch noch nicht. Bin halt noch ein blutiger Anfänger der -stoppeln gehen muß.

    Der Übersichtshalber hänge ich mal ein Bild von meinem Formular an.

    LG
    Bilder
    • Fenster Frequenzbereiche festlegen klein.jpg

      83,34 kB, 944×652, 325 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „varo.biker“ ()

    Hallo Vario.Biker,

    dass der Text grau erscheint könnte sein, wenn Textbox.Enabled = false ist.
    Du arbeitest mit Double, setze also bitte das CDEC nach dem Format auf CDBL.
    Du solltest dir auch überlegen deine Abwicklung mittels Funktion zu machen, dann brauchst du nicht für jede Checkbox eine so lange Sub, sondern löst eine Funktion aus, indem du den SENDER.NAME des Checkbox Events nutzt.

    Gruß

    Siestaeg
    Hallo Siestaeg,

    leider bin ich absoluter Neuling und habe überhaupt keine Erfahrungen mit Funktionen.
    Wenn ich gemein sein darf - wie würde denn so eine Funktion aussehen und was gilt es dabei zu beachten.

    Vielen Vielen Dank erst einmal für Deine bisherige Hilfe, hat mich erheblich weiter gebracht.

    Grüße varo.biker :)

    PS Du hattest übrigens Recht, habe es hin bekommen das die Zahlen in rot erscheinen.
    Hallo Vario.Biker,

    wie ich gesehen habe, hast du deine Steuerelemente schön durchnummeriert. Also könntest du folgendes machen:

    VB.NET-Quellcode

    1. Private Function Formatieren (byval chkBoxName as string)
    2. Dim Nr as String
    3. for x = chkBoxName.lenght -3 to chkBoxName.lenght -1
    4. if isnumeric(chkBoxName(x)) then
    5. Nr= Nr & chkBoxName(x)
    6. end if
    7. next
    8. Dim txtbox1 as textbox = ctype(me.controls("txt_Freq_start_cbx" & Nr),textbox)
    9. Dim txtbox2 as textbox = ctype(me.controls("txt_Freq_ende_cbx" & Nr),textbox)
    10. If cbx_form_freq_bereich_1.Checked = True Then
    11. txtbox1 .Enabled = True
    12. txtbox2 .Enabled = True
    13. Else
    14. txtbox1 .Enabled = False
    15. txtbox2 .Enabled = False
    16. End If
    17. end sub




    Im Handle der Checkbox, übrigens kannst du mehrere Checkboxen hintereinander angeben, BsP:

    Handles
    CheckBox2.CheckedChanged, CheckBox1.CheckedChanged

    VB.NET-Quellcode

    1. Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    2. Formatieren (sender.name)
    3. End Sub




    habe den Code nicht probiert, aber du kannst darauf aufsetzen. Also viel Spaß noch und schönes WE.