NumericUpDown Value verändert sich bei Numpad Minus

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    NumericUpDown Value verändert sich bei Numpad Minus

    Hey,

    Ich habe mir grad einen simplen Zähler gebastelt.
    Mit dem Form.KeyDown Event (Form.KeyPreview = true) ändere ich den Wert um eine NumericUpDown.Value, wenn ich Numpad-Plus oder Numpad-Minus drücke.
    Das ganze sieht so aus:

    C#-Quellcode

    1. if (e.KeyCode == Keys.Add)
    2. Update(value, (int)nudChangeValue.Value);
    3. if (e.KeyCode==Keys.Subtract)
    4. {
    5. int negChange = (int)nudChangeValue.Value * (-1);
    6. Update(value, negChange);
    7. }


    Update addiert nur die mitgelieferten Werte und packt sie in den Text eines Labels, ich packs jedoch trotzdem mal dazu:

    C#-Quellcode

    1. private void Update(int oldValue, int changeValue)
    2. {
    3. value = oldValue + changeValue; // value ist global und stellt den aktuellen Wert dar
    4. lblCurrValue.Text = value.ToString();
    5. }

    Das Addieren funktioniert prima.
    Beim Subtrahieren funktioniert der erste Klick, jedoch wird am aktuellen Index im NumericUpDown ein "-" eingefügt.
    Das habe ich mit einem NumericUpDown.Text.Replace gelöst

    Wenn ich aber ein zweites Mal auf das Numpad-Minus drücke,
    wird der Wert jetzt nicht mehr geändert und der NumericUpDown Text wird zu einem "-0", egal was davor war.
    Wie kann ich irgendwas dagegen tun?

    Grüße
    Grüße
    Felix

    Kenaex schrieb:

    int negChange = (int)nudChangeValue.Value * (-1);
    sollte einfach -1 sein.
    Wenn Value == 0 ist, ist x * 0 auch nur 0.
    Setz nen Haltepunkt da rein und stelle fest, was da nicht passiert.
    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 Felix aka @Kenaex
    Unterdrücke den Tastendruck nach dem "Update", dann ist das Problem mit dem "-"-einfügen auch erledigt.

    C#-Quellcode

    1. private void Form1_KeyDown(object sender, KeyEventArgs e)
    2. {
    3. if (e.KeyCode == Keys.Add)
    4. {
    5. Update(value, (int)nudChangeValue.Value);
    6. e.SuppressKeyPress = true;
    7. }
    8. if (e.KeyCode == Keys.Subtract)
    9. {
    10. int negChange = (int)nudChangeValue.Value * (-1);
    11. Update(value, negChange);
    12. e.SuppressKeyPress = true;
    13. }
    14. }


    Gruss HenryV
    @RodFromGermany
    Danke für die Antwort, aber ich verstehe nicht was du meinst.
    Wenn die Menge abgezogen werden soll, muss ja ein negativer Wert addiert werden, also mache ich mit ​* (-1) einen negativen Wert aus der ganzen Sache, der dann addiert wird. Ich versteh nicht so Recht, was du mir sagen möchtest?

    @HenryV
    Danke, funktioniert prima.

    Grüße
    Grüße
    Felix
    @Kenaex
    Null multipliziert mit WasAuchImmer ist gleich Null.
    Und machst Du:

    C#-Quellcode

    1. int negChange = -(int)nudChangeValue.Value;
    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!

    Kenaex schrieb:

    im Normalfall ist das ganze ja nicht null.
    Du wirst Dich wundern, was normal ist. 8o
    Sieh besser vor, dass im Falle 0 da eine +-1 drin steht.
    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!