NumericUpDown und Division durch Null

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von Uchi-Komi.

    Uchi-Komi schrieb:

    GUI werden wohl Wertzuweisungen durch Controls genannt?
    Nein. => Graphical User Interface.
    Ja, Netto wäre eine Variable.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    Uchi-Komi schrieb:

    Wie schaltet man die Eventhandler aus?
    So was:

    VB.NET-Quellcode

    1. Private FlagUseEventhandler As Boolean =True
    2. Sub CheckBox1_CheckedCanged(...) Handles CheckBox1.CheckedCanged
    3. FlagUseEventhandler = CheckBox1.Checked
    4. End Sub
    5. Sub AnyEventHandler() Handles ...
    6. If Not FlagUseEventhandler Then Return
    7. ' ...
    8. End Sub
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Uchi-Komi Das mit dem Erlauben und Verbieten der Eventhandler kannst Du dann natürlich im Code selbst machen, ohne jedes Mal eine CheckBox zu bemühen, direkt im Eventhandler (Pseudocode):

    Quellcode

    1. Private FlagUseEventhandler As Boolean = True
    2. Sub NumericUpDown1, NumericUpDown2, NumericUpDown3, NumericUpDown4
    3. If Not FlagUseEventhandler Then Return
    4. FlagUseEventhandler = False
    5. Viele Programmschritte
    6. FlagUseEventhandler = True
    7. End Sub
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RodFromGermany!

    Ich bin erstaunt und erfreut, dass sich ein Großmeister (mit gut 40.000 Beiträgen) um meine bescheidene Aufgabe kümmert und - wie ein umgefallenes Kücken - mir wieder auf die Füße hilft. War schon dabei, den Mut zu verlieren.

    Ich hab alle Programmzeilen bis auf "Netto" deaktiviert um das Problem einzukreisen und das Programm sieht mit Deinem Hinweis nun so aus:

    VB.NET-Quellcode

    1. Public Class frmUmsatzsteuer
    2. Dim Netto As Double
    3. Dim UmsatzsteuerEuro As Double
    4. Dim UmsatzsteuerProzent As Double
    5. Dim Brutto As Double
    6. Private FlagUseEventhandler As Boolean = True
    7. Private Sub nudNetto_ValueChanged_1(sender As Object, e As EventArgs) Handles nudNetto.ValueChanged
    8. If Not FlagUseEventhandler Then Return
    9. FlagUseEventhandler = False
    10. Netto = nudNetto.Value
    11. UmsatzsteuerEuro = (UmsatzsteuerProzent / 100) * Netto
    12. Brutto = Netto + UmsatzsteuerEuro
    13. UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value
    14. [b]nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro)[/b]
    15. nudBrutto.Value = CDec(Brutto)
    16. FlagUseEventhandler = True
    17. End Sub


    Wenn ich das Programm starte, habe ich immer noch die Fehlermeldung - nicht mehr sofort, sondern wenn ich in nudNetto einen Wert eintrage - an der Backe:
    nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro) - Fehler
    "In System.ArgumentOutOfRangeException ist eine Ausnahme vom Typ "System.Windows.Forms.dll" aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.
    Zusätzliche Informationen: Der Wert 0 ist für Value ungültig. Value sollte zwischen 'Minimum' und 'Maximum' liegen.
    "

    Kein Steuerfeld hat aber den Wert 0 und . Value liegt zwischen 'Minimum' und 'Maximum'.
    ?
    Kann man hier kein Bild mehr einfügen? Zu Beginn ging es.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Uchi-Komi“ ()

    Hallo

    Dann setzte am besten in der Zeile wo der Fehler auftritt einen Haltepunkt. Wenn du der beim ausführen der Anwendung dort hält, fahre mit der Maus über CDec(UmsatzsteuerEuro) und sehe mal nach was hier für ein Wert drinnen steht. Das ist Debuggen. So kannst du jederzeit dein Programm überprüfen und auch mittels einzelschritt (F10 bzw. noch genauer mit F11) weitergehen.
    Das wird dir in Zukunft sehr weiterhelfen und gehärt fast zu den täglichen tätigkeiten als Programmierer.

    Übrigens: Bearbeite bitte deinen Post. ROT ist nur den Moderatoren Vorbehalten. Siehe Boardregeln.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Danke Nofear23m!

    Umsatzsteuervalue steht: {Value = 19D Min = 1D Max = 100000000D}
    CDec(UmsatzsteuerEuro) steht: 0,0
    Einen Fehler gefunden!!! Es war zu späte Zuweisung. Mein Fehler.
    UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value wurde erst nach der Berechnung zugewiesen .
    Und einen Gruß nach Wien!

    Das nudNetto funkioniert und der Programmteil für das Netto-NumericUpDown sieht nun so aus:

    VB.NET-Quellcode

    1. Private Sub nudNetto_ValueChanged_1(sender As Object, e As EventArgs) Handles nudNetto.ValueChanged
    2. If Not FlagUseEventhandler Then Return
    3. FlagUseEventhandler = False
    4. 'Variable erhalten Wert von NumericUpDown's
    5. Netto = nudNetto.Value
    6. UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value
    7. 'Berechnungen
    8. UmsatzsteuerEuro = (UmsatzsteuerProzent / 100) * Netto
    9. Brutto = Netto + UmsatzsteuerEuro
    10. 'Ergebnis in NumericUpDown's anzeigen
    11. nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro)
    12. nudUmsatzsteuerProzent.Value = CDec(UmsatzsteuerProzent)
    13. nudBrutto.Value = CDec(Brutto)
    14. FlagUseEventhandler = True
    15. End Sub





    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Uchi-Komi“ ()

    Hallo

    Na da hast du es ja schon. Es steht auf 0. Also ist die Fehlermeldung ja vollkommen korrekt oder?
    Jetzt machst du das ganze nochmal (ich dachte nich das ich das dazu sagen muss) und bewegst die Maus auch über die anderen Variablen.
    Fällt dir da was auf? Ich kenne ja die Defaultwerte nicht, aber ich gehe davon aus das UmsatzsteuerProzent und/oder Netto auch 0 sind oder?
    Du tust dir selbst einen gefallen ein Tut von @RodFromGermany anzusehen und zu lernen. Das brauchst du und ist wirklich essentiell. Achja, lass doch gleich ein "Hilfreich" da.

    Solltest du wirklich nicht weiterkommen gehen wir das problem so an das du die Werte im Code gleich "vorbelegst" damit auch WIR wissen was in den Variablen ca. drinnen steht.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Uchi-Komi schrieb:

    um meine bescheidene Aufgabe kümmert
    Mir war wichtig, dass Du nicht in eine falsche Ecke geschubst wirst, da bin ich halt eingeschritten.
    Und ins Wasser schmeißen ohne eine Hand hinzuhalten mach ich auch nicht. ;)
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nun, die Kuh ist noch nicht vom Eis!

    Ich habe mir nun das nudUmsatzsteuerEuro analog vorgenommen und wieder die gleiche Fehlermeldung klassiert.

    Dabei ist mir aufgefallen, dass im Falle von nudUmsatzsteuerEuro die Befehle

    VB.NET-Quellcode

    1. UmsatzsteuerEuro = nudUmsatzsteuerEuro.Value
    2. UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value


    in Abhängigkeit von der gewählten Form der Ergebnisanzeige funktionieren.

    Verwende ich die Ausgabe

    VB.NET-Quellcode

    1. nudNetto.Value = CDec(Netto)
    2. nudBrutto.Value = CDec(Brutto)


    dann gibt es die Fehlermeldung "Dividieren Sie nicht durch Null" im Einzelnen:
    "System.OverflowException wurde nicht von Benutzercode behandelt.
    HResult=-2146233066
    Message=Der Wert für eine Decimal war zu groß oder zu klein.
    Source=mscorlib
    StackTrace:
    bei System.Decimal..ctor(Double value)
    bei AbwasserExeIntern2018.frmUmsatzsteuer.nudUmsatzsteuerEuro_ValueChanged(Object sender, EventArgs e) in H:\Visual Studio 2018\AbwasserExeIntern2018\AbwasserExeIntern2018\frmUmsatzsteuer.vb:Zeile 80.
    bei System.Windows.Forms.NumericUpDown.OnValueChanged(EventArgs e)
    bei System.Windows.Forms.NumericUpDown.set_Value(Decimal value)
    bei System.Windows.Forms.NumericUpDown.set_Minimum(Decimal value)
    bei AbwasserExeIntern2018.frmUmsatzsteuer.InitializeComponent() in H:\Visual Studio 2018\AbwasserExeIntern2018\AbwasserExeIntern2018\frmUmsatzsteuer.Designer.vb:Zeile 142.
    bei AbwasserExeIntern2018.frmUmsatzsteuer..ctor() in H:\Visual Studio 2018\AbwasserExeIntern2018\AbwasserExeIntern2018\frmUmsatzsteuer.vb:Zeile 14.
    InnerException: '"

    UmsatzsteuerProzent wird von nudUmsatzsteuerProzent.Value eine Null zugewiesen, obwohl nudUmsatzsteuerProzent.Value = 19 ist

    VB.NET-Quellcode

    1. nudNetto.Value = CDec(Netto)
    .
    Spannend wurde es als ich die Ergebnisse in Labels anzeigen ließ:

    VB.NET-Quellcode

    1. Label1.Text = CStr(Netto)
    2. Label2.Text = CStr(UmsatzsteuerEuro)
    3. Label4.Text = CStr(Brutto)


    Alle bisher programmierten Funktionen rechneten fehlerfrei.

    VB.NET-Quellcode

    1. nudNetto.Value
    scheint mal die Umwandlung von

    VB.NET-Quellcode

    1. CDec(Netto)
    zu mögen und mal nicht.

    Habt Ihr noch 'ne göttliche Eingebung?

    (Bin erst morgen wieder am Platz.)

    Beste Grüße

    Hier der Programmausschnitt.


    vbnet]Private Sub nudUmsatzsteuerEuro_ValueChanged(sender As Object, e As EventArgs) Handles nudUmsatzsteuerEuro.ValueChanged

    If Not FlagUseEventhandler Then Return
    FlagUseEventhandler = False

    '######################## Aktion nudUmsatzsteuerEuro ###################################

    'Variable erhalten Wert von NumericUpDown's

    UmsatzsteuerEuro = nudUmsatzsteuerEuro.Value
    UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value

    'Berechnungen

    Netto = UmsatzsteuerEuro / (UmsatzsteuerProzent / 100)
    Brutto = Netto + UmsatzsteuerEuro

    'Ergebnis in NumericUpDown's anzeigen

    'Variante 1 funktioniert
    Label1.Text = CStr(Netto)
    Label2.Text = CStr(UmsatzsteuerEuro)
    Label4.Text = CStr(Brutto)

    'Variante 2 funktioniert nicht
    'nudNetto.Value = CDec(Netto)
    'nudBrutto.Value = CDec(Brutto)

    FlagUseEventhandler = True

    End Sub[/vbnet]

    Uchi-Komi schrieb:

    'Variante 2 funktioniert nicht
    Wie äußert sich das Nicht-Funktionieren?
    ====
    Statt

    Uchi-Komi schrieb:

    VB.NET-Quellcode

    1. Label4.Text = CStr(Brutto)
    machst Du

    VB.NET-Quellcode

    1. Label4.Text = Brutto.ToString()
    da kannst Du in das ToString() sogar noch Formatanweisungen schreiben:

    VB.NET-Quellcode

    1. Label4.Text = Brutto.ToString("C")



    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Wie äußert sich das Nicht-Funktionieren?


    Schönen guten Abend!

    Ich habe mich vielleicht nicht präzise ausgedrückt.

    Die Label-Ausgabe funktionierte auf Anhieb. Das war aber nur ein Test um festzustellen, ab welcher Stelle der Fehler beginnt.

    Meine Luxusaufgabe, die ich mir gestellt habe, war die Wertzuweisung in ein NumericUpDown (wenn es geht).

    Wobei ich aber später den Code gern auch in anderen Programmen nutzen möchte. Es hat also auch einen nützlichen Hintergrund.

    Mit Eurer Hilfe hab ich es geschafft, dass das nudNetto-Feld des Umsatzsteuerrechner nun funktioniert und alle Ergebnisse korrekt angezeigt werden.

    Jetz habe ich mich (mit der bewährten Methode) an das nudUmsatzsteuer-Feld herangewagt und die Ergebnisanzeige im NumericUpDown funktioniert nicht. Das nudNetto-Feld funktioniert aber immer noch.

    Bei der Fehlersuche glaube ich festgestellt zu haben, dass das nudNetto-Feld den Wert weitergibt, die Formeln korrekt rechnen. Bei der Ergebnisausgabe in die beiden NumericUpDown-Felder

    VB.NET-Quellcode

    1. nudNetto.Value = CDec(Netto)
    2. nudBrutto.Value = CDec(Brutto)


    kommt "Division durch Null!" und "Der Wert für eine Decimal war zu groß oder zu klein."

    Der Syntax z.B.

    VB.NET-Quellcode

    1. nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro)
    2. nudUmsatzsteuerProzent.Value = CDec(UmsatzsteuerProzent)
    3. nudBrutto.Value = CDec(Brutto)


    funktioniert im 1. Prgrammabschnitt fehlerfrei.

    Könnte ich einen Fehler bei der Nutzung des FlagUseEventhandler gemacht haben?

    Um es zusammenzufassen: Das Nicht-Funktionieren äußert sich in der Fehlermeldung "Division durch Null", obwohl korrekt gerechnet wird.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Uchi-Komi“ ()

    Uchi-Komi schrieb:

    "Der Wert für eine Decimal war zu groß oder zu klein."
    Setz da nen Haltepunkt drauf und sieh Dir diesen Wert sowie .Minimum und .Maximum des NUD an.
    Sind alle diese Werte sinnvoll?
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also Szenario 1: Fehlermeldung im 2. Programmanbschnitt ausgeschaltet
    • Erster Programmabschnitt rechnet
    • Haltepunkt bei "Private Sub nudUmsatzsteuerEuro_ValueChanged(sender As Object, e As EventArgs) Handles nudUmsatzsteuerEuro.ValueChanged" gesetzt und Ausgabe-Nud's des erster Programmabschnittes überprüft: nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro); nudUmsatzsteuerProzent.Value = CDec(UmsatzsteuerProzent); nudBrutto.Value = CDec(Brutto)
    • Alle Ausgabe-Nud's haben den Wert: {Value = 0D Min = 0D Max = 100D} und die zugehörigen Variablen den Wert Null, obwohl der 1, Abschnitt korrekt die Ergebnisse anzeigt.
    2. Szenario 1: Ausgabe.Nud's im 2. Programmabschnitt nicht ausgeschaltet
    • Nach Programmstart kommt sofort die Fehlermeldung.
    • Alle Ausgabe-Nud's haben den Wert: {Value = 0D Min = 0D Max = 100D} und die zugehörigen Variablen den Wert Null obwohl der 1, Abschnitt korrekt die Ergebnisse anzeigt.
    In den Eigenschaften der Nud's habe ich konkrete Werte voreingestellt, z.B.: nudUmsatzsteuerEuro.Value = 19, Max 100, Min 1 und Nullwerte nimmt ein Nud gar nicht an.

    Also: Die Werte in den Nud's sind überhaupt nicht sinnvoll. Sie sind auch im funktionierenden 1. Programmabschnitt nicht sinnvoll.

    Uchi-Komi schrieb:

    Nach Programmstart kommt sofort die Fehlermeldung.
    Dann musst Du das Flag so einrichten, dass bei Programmstart die Routine nicht durchgeführt wird, sondern erst nach vollständiger Initialisierung aller Controls.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke schön!
    Mit Deinem Hinweis gab es schon einen Teilerfolg. Habe aber noch nicht alle Möglichkeiten getestet.
    Beste Grüße!

    08.12.2017:
    So, nun nach endlosem Probieren funktioniert das Programm.
    Warum es nun in diesem Falle funktioniert, weiß ich nicht.
    Aber auf der Welt gibt es viele Dinge, die funktionieren und niemand weiß warum ;).
    Ausschlaggebend war bei dem Umsatzsteuerbeispiel folgende Wertzuweisung zu Beginn des Programmes:

    VB.NET-Quellcode

    1. nudUmsatzsteuerProzent.Value = 19

    Normaler Weise müsste es auch so funktionieren:

    VB.NET-Quellcode

    1. UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value

    Klappt meistens, aber nicht immer.

    Auch wenn ich es bei diesem Beispiel mit dem FlagUseEventhandler nicht hinbekommen habe, wäre ich ohne Eure Hilfe nicht so weit gekommen.

    Im Falle mit nur 3 NumericUpdowns war bei dem gewünschten Komfort nicht auf den FlagUseEventhandler zu verzichten.

    Nicht nur diesbezüglich wieder mal was Neues gelernt!
    Vielen Dank!

    Für jenen Leser, der das m.E. fehlerfreie Programm nachnutzen möchte, hier der Code:

    VB.NET-Quellcode

    1. Option Explicit On
    2. Option Strict On
    3. Imports System.IO
    4. Imports System.Drawing
    5. Imports System.Windows.Forms
    6. Imports System.Drawing.Printing
    7. Imports System.Windows.Forms.DataFormats
    8. Public Class frmUmsatzsteuer
    9. Dim Netto, UmsatzsteuerEuro, Brutto As Decimal
    10. Dim UmsatzsteuerProzent As Decimal
    11. Private Sub nudNetto_ValueChanged_1(sender As Object, e As EventArgs) Handles nudNetto.ValueChanged
    12. '######################## Aktion nudNetto ###################################
    13. 'Variable erhalten Wert von NumericUpDown's
    14. Netto = nudNetto.Value
    15. nudUmsatzsteuerProzent.Value = 19
    16. UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value
    17. 'Berechnungen:
    18. UmsatzsteuerEuro = (UmsatzsteuerProzent / 100) * Netto
    19. Brutto = Netto + UmsatzsteuerEuro
    20. ' Ergebnis in NumericUpDown's anzeigen
    21. nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro)
    22. nudUmsatzsteuerProzent.Value = CDec(UmsatzsteuerProzent)
    23. nudBrutto.Value = CDec(Brutto)
    24. End Sub
    25. Private Sub nudUmsatzsteuerEuro_ValueChanged(sender As Object, e As EventArgs) Handles nudUmsatzsteuerEuro.ValueChanged
    26. '######################## Aktion nudUmsatzsteuerEuro ###################################
    27. 'Variable erhalten Wert von NumericUpDown's
    28. UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value
    29. UmsatzsteuerEuro = nudUmsatzsteuerEuro.Value
    30. 'Berechnungen:
    31. Netto = UmsatzsteuerEuro / (UmsatzsteuerProzent / 100)
    32. Brutto = Netto + UmsatzsteuerEuro
    33. ' Ergebnis in NumericUpDown's anzeigen
    34. nudNetto.Value = CDec(Netto)
    35. nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro)
    36. nudUmsatzsteuerProzent.Value = CDec(UmsatzsteuerProzent)
    37. nudBrutto.Value = CDec(Brutto)
    38. End Sub
    39. '######################## Aktion nudBrutto ###################################
    40. Private Sub nudBrutto_ValueChanged(sender As Object, e As EventArgs) Handles nudBrutto.ValueChanged
    41. 'Variable erhalten Wert von NumericUpDown's
    42. Brutto = nudBrutto.Value
    43. UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value
    44. 'Berechnung:
    45. Netto = Brutto / (1 + (UmsatzsteuerProzent / 100))
    46. UmsatzsteuerEuro = Brutto - Netto
    47. ' Ergebnis in NumericUpDown's anzeigen
    48. nudNetto.Value = CDec(Netto)
    49. nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro)
    50. nudUmsatzsteuerProzent.Value = CDec(UmsatzsteuerProzent)
    51. End Sub
    52. '######################## Aktion nudUmsatzsteuerProzent ###################################
    53. Private Sub nudUmsatzsteuerProzent_ValueChanged(sender As Object, e As EventArgs) Handles nudUmsatzsteuerProzent.ValueChanged
    54. 'Variable erhalten Wert von NumericUpDown's
    55. UmsatzsteuerProzent = nudUmsatzsteuerProzent.Value
    56. 'Berechnung
    57. UmsatzsteuerEuro = Netto * UmsatzsteuerProzent / 100
    58. Brutto = UmsatzsteuerEuro + Netto
    59. ' Ergebnis in NumericUpDown's anzeigen
    60. nudUmsatzsteuerEuro.Value = CDec(UmsatzsteuerEuro)
    61. nudBrutto.Value = CDec(Brutto)
    62. End Sub






    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Uchi-Komi“ ()

    RodFromGermany schrieb:

    Das mit dem Erlauben und Verbieten der Eventhandler kannst Du dann natürlich im Code selbst machen, ohne jedes Mal eine CheckBox zu bemühen, direkt im Eventhandler (Pseudocode):


    In einem anderen Beispiel mit nur 3 NumericUpDown's funktionierte Dein Programm auf Anhieb.

    Auch der zusätzliche Programmieraufwand hält sich in Grenzen.

    Toll!

    Für Nachnutzer ein getestetes Fallbeispiel aus der Stöchiometrie:

    VB.NET-Quellcode

    1. Private Sub nudNammonium_ValueChanged(sender As Object, e As EventArgs) Handles nudNammonium.ValueChanged
    2. '######################## Aktion nudNammonium ###################################
    3. If Not FlagUseEventhandler Then Return
    4. FlagUseEventhandler = False
    5. 'Variable erhalten Wert von NumericUpDown's
    6. Nammonium = nudNammonium.Value
    7. 'Berechnungen:
    8. Ammonium = N * 1.287856072
    9. H4ammonium = Ammonium - N
    10. ' Ergebnis in NumericUpDown's anzeigen
    11. nudAmmonium.Value = CDec(Ammonium)
    12. nudH4ammonium.Value = CDec(H4ammonium)
    13. FlagUseEventhandler = True
    14. End Sub
    15. Private Sub NudH4ammonium_ValueChanged(sender As Object, e As EventArgs) Handles NudH4ammonium.ValueChanged
    16. '######################## Aktion nudNammonium ###################################
    17. If Not FlagUseEventhandler Then Return
    18. FlagUseEventhandler = False
    19. 'Variable erhalten Wert von NumericUpDown's
    20. 'nudNammonium.Value = CDec(14.007)
    21. H4ammonium = NudH4ammonium.Value
    22. 'Berechnungen:
    23. Ammonium = H4ammonium * 4.473958333
    24. Nammonium = Ammonium - H4ammonium
    25. ' Ergebnis in NumericUpDown's anzeigen
    26. nudAmmonium.Value = CDec(Ammonium)
    27. nudNammonium.Value = CDec(Nammonium)
    28. FlagUseEventhandler = True
    29. End Sub
    30. Private Sub nudAmmonium_ValueChanged(sender As Object, e As EventArgs) Handles nudAmmonium.ValueChanged
    31. '######################## Aktion nudNammonium ###################################
    32. If Not FlagUseEventhandler Then Return
    33. FlagUseEventhandler = False
    34. 'Variable erhalten Wert von NumericUpDown's
    35. Ammonium = nudAmmonium.Value
    36. 'Berechnungen:
    37. Nammonium = Ammonium / 0.776484284
    38. H4ammonium = Ammonium - Nammonium
    39. ' Ergebnis in NumericUpDown's anzeigen
    40. nudAmmonium.Value = CDec(Ammonium)
    41. nudNammonium.Value = CDec(Nammonium)
    42. FlagUseEventhandler = True
    43. End Sub