numericupdown wie richtig binden?

  • VB.NET
  • .NET 4.5

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    numericupdown wie richtig binden?

    Ich wollte auf einem Formular ein gebundenes numericpudown Steuerelement verwenden.
    Wenn es nur per up- und downbutton (abgefragt über Valuechange)
    oder durch Tasten (abgefragt über Keypress) bedienbar sein soll funktioniert es.
    Möchte ich aber das beide Varianten funktionieren, wird der über Tastatur eingegebene Wert beim ersten mal nicht richtig übernommen.
    Ändere ich den Wert daraufhin ein zweites mal funktioniert es, auch bei allen weiteren Änderungen.
    Es muß dann aber wirklich eine andere Zahl drinstehen als vorher. (0 weg und wieder dran wird nicht akzeptiert)
    Wenn er eine Änderung akzeptiert hat, werden auch alle folgenden Änderungen ordentlich durchgeführt.
    Auch wenn ich den Button nach oben oder nach unten drücke wird die Änderung erst ab dem 2. Click akzeptiert.
    Wie muß ich es richtig machen ?

    VB.NET-Quellcode

    1. Public Class Testnumupdown
    2. Dim dtrowTest As dsBueromaterial.TestRow
    3. Dim blnTest As Boolean
    4. Public Sub New()
    5. ' Dieser Aufruf ist für den Designer erforderlich.
    6. InitializeComponent()
    7. Me.TestBindingSource.AddNew()
    8. dtrowTest = DirectCast(DirectCast(Me.TestBindingSource.Current, DataRowView).Row, dsBueromaterial.TestRow)
    9. dtrowTest.Bedarf = 50
    10. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    11. blnTest = True
    12. End Sub
    13. Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
    14. If blnTest Then
    15. Me.TestBindingSource.EndEdit()
    16. dtrowTest = DirectCast(DirectCast(Me.TestBindingSource.Current, DataRowView).Row, dsBueromaterial.TestRow)
    17. Me.txtText.Text = dtrowTest.Büromaterial
    18. Me.txtZahl.Text = dtrowTest.Bedarf.ToString
    19. Me.txtZahlOriginal.Text = Me.NumericUpDown1.Value.ToString
    20. End If
    21. End Sub
    22. Private Sub NumericUpDown1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles NumericUpDown1.KeyPress
    23. If blnTest AndAlso e.KeyChar = Cr Then
    24. Me.TestBindingSource.EndEdit()
    25. dtrowTest = DirectCast(DirectCast(Me.TestBindingSource.Current, DataRowView).Row, dsBueromaterial.TestRow)
    26. Me.txtText.Text = dtrowTest.Büromaterial
    27. Me.txtZahl.Text = dtrowTest.Bedarf.ToString
    28. Me.txtZahlOriginal.Text = Me.NumericUpDown1.Value.ToString
    29. End If
    30. End Sub
    31. End Class

    Neu

    Schoofi schrieb:

    Ich wollte auf einem Formular ein gebundenes numericpudown Steuerelement verwenden.
    Fein - und wenn du schon dabei bist, binde die Textboxen doch auch.
    Dann kannste zeilen #18-38 löschen.
    Achte darauf, dass bei der Nud-Bindung der DatasourceUpdatemode auf PropertyChanged steht.
    solch stellst du in den erweiterten Eigenschaften des Bindings ein.

    Neu

    Danke, funzt. Die Textfelder habe ich bewußt nicht gebunden, da ich den Status der Werte während des Ereignisse sehen wollte. In denen werden die Daten im echten Programm weiter ausgewertet.
    Hier ging es mir nur darum nachzuvollziehen warum die Werte nicht ins Datarow übernommen wurden.

    Neu

    Deswegen kannste ja trotzdem die Textboxen binden - odr?

    Und Wennde Änderungen der Auswahl mitkriegen willst, nimm BindingSource_CurrentChanged.
    Auf Controls muss man nur in allerseltensten Fällen zugreifen.

    Trenne Daten und Gui. Und das ist v.a. eine Kopf-Sache, dass man anfängt, in Daten zu denken - etwa Bedarf und Büromaterial, und nicht in Textboxen etc.
    Weil es geht um Büromaterial - nicht um Textboxen.