In Textbox nur Zahlen zulassen, aber noch ein CHF anzeigen, der nicht im Text integriert ist?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von a.b_om.

    In Textbox nur Zahlen zulassen, aber noch ein CHF anzeigen, der nicht im Text integriert ist?

    Hallo Community

    Ich bins wieder.

    Ich habe eine Frage.

    Ich habe eine Textbox, in der nur Zahlen eingebbar ist.

    Jetzt möchte ich, dass am Schluss noch ein "CHF" angezeigt wird.

    Es sollte nicht im Textbox.Text integriert sein, weil dort nur Zahlen eingebbar ist und ich nicht
    möchte, dass der User das CHF ausversehen löschen kann. Mit einem Label, möchte ich das auch nicht machen.

    An den Text splitten hatte ich auch schon gedacht, aber es ist fehleranfällig und ich möchte eine andere Methode kennenlernen.

    Edit:

    Diese Textbox ist an einer Bindigsource angehängt, und die Datenbank, fordert ein Text, der in ein Real konventierbar ist.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „a.b_om“ ()

    @a.b_om da musst Du zunächst per KeyDown dafür sorgen, dass nur erlaubte Zeichen eingegeben werden können,
    Komma/Punkt als Dezimalseparator für Real.
    Wahrscheinlich meinst Du, dass das CHF nicht aus Versehen gelöscht werden kann.
    Welche Bewandtnis hat es denn mit diesem CHF?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Eierlein schrieb:

    Schweizer Franken

    VB.NET-Quellcode

    1. MessageBox.Show(12.34.ToString("c"))
    Nimmt die Länder-Einstellung vom System.
    Allerdings ist die TextBox als solche da überfordert.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    a.b_om schrieb:

    Diese Textbox ist an einer Bindigsource angehäng
    Wenn's gebunden ist, kann man in etwa so vorgehen:

    VB.NET-Quellcode

    1. 'Eingabe-Textbox binden
    2. Dim bdg = New Binding("Text", DeineBindingSource, "DeineSpalte", True, DataSourceUpdateMode.OnPropertyChanged)
    3. AddHandler bdg.Format, AddressOf FormatiereDeineEingabe
    4. AddHandler bdg.Parse, AddressOf ParseDeineEingabe
    5. DeineTextBox.DataBindings.Add(bdg)
    6. ''' <summary>
    7. ''' Formatierung der Eingabe
    8. ''' </summary>
    9. Private Sub FormatiereDeineEingabe(sender As Object, e As ConvertEventArgs)
    10. If e.DesiredType IsNot GetType(String) Then Exit Sub
    11. Dim dbl As Double
    12. If Double.TryParse(e.Value.ToString, dbl) Then
    13. e.Value = dbl.ToString("N0") & " CHF"
    14. Else
    15. e.Value = String.Empty
    16. End If
    17. End Sub
    18. ''' <summary>
    19. ''' Wertüberprüfung der gebundenen Textbox
    20. ''' Es wird hier nur auf DoubleTyp geprüft
    21. ''' </summary>
    22. Private Sub ParseDeineEingabe(sender As Object, e As ConvertEventArgs)
    23. If e.DesiredType IsNot GetType(Double) Then Exit Sub
    24. Dim dbl As Double
    25. Double.TryParse(e.Value.ToString, dbl)
    26. e.Value = dbl
    27. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    Gut, ich erkläre es mal anders.

    Wenn ich den Wert von der Datenbank lese, ist sie "0.3".
    In der Textbox sollte "0.30 CHF" stehen.
    Wenn ich danach den Zeilencode variablenname = Textbox.Text() ausführe,
    sollte in der Variable 0.3 stehen.

    Wie kriege ich das ohne Label hin.

    Eine Mask funktioniert nicht, weil es teoretisch ne 39 Vorkommastellen haben kann und ich es nicht leere Vorkommastellen mit 0 füllen möchte.

    Edit:
    Ein bisschen zu spät.

    Ich speichere es direkt über die Databinding und möchte es nicht noch zuerst darauslesen und mit einer weiteren Query speichern.

    Edit 2:

    Ich habe mitbekommen, dass es mit einem "Format" möglich ist, aber wie?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „a.b_om“ ()

    Nein, weil ich das Databinding nicht selber gemacht habe. Ich habe die Textbox einfach aus den Datenquellen gezogen.

    Ich muss nur die Textbox formatieren.
    Ich fülle die Textbox mit

    VB.NET-Quellcode

    1. Me.TabelAdapterTabel.Fill(Me.DataSet.Tabelle)


    Edit:
    @VB1963
    Wie schon gesagt, mache ich die Databinding nicht selber.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „a.b_om“ ()

    a.b_om schrieb:

    @VB1963
    Wie schon gesagt, mache ich die Databinding nicht selber.

    Was vb1963 zeigt, geht ebenso auch mit dem Binding, was der Designer gemacht hat.
    Angenommen, deine Textbox heisst "txtSumme", so erhälst du so deren Binding der Text-Property:

    Visual Basic-Quellcode

    1. dim bdg=txtSumme.Databindings("Text")
    2. AddHandler bdg.Format, AddressOf FormatiereDeineEingabe
    3. AddHandler bdg.Parse, AddressOf ParseDeineEingabe
    Auszuführen im Form_Load-Event