Ich möchte diese WinForm
Kontrolle machen (NumericUpDown
) erzwingen ganze Zahlen bedingt je nach Typ (ganz vs floating) der Sache, mit der ich arbeite.Wie kann verhindert werden, dass System.Windows.Forms.NumericUpDown nicht-Ziffern eingibt, wenn DecimalPlaces = 0 ist?
Wenn ich die DecimalPlaces = 0
einstelle, wird 0 angezeigt, und dann wird diese um 1 erhöht/verringert, wenn ich auf/ab klicke. Wenn ich jedoch 0.6
eingeben, wird es als 1 angezeigt, bleibt aber als 0.6
. Wenn ich es anschließend inkrementiere, wird der zugrunde liegende aber nicht angezeigte Wert 1,6 sein.
Ich bin auf der Suche nach einer einfachen, idiomatischen Art und Weise zu erzwingen, was ich will (hoffentlich ist klar, was ich will). Wenn ich irgendeine Art von Ereignis abfangen muss, werde ich das tun, aber ich hoffe, dass ich mich nur auf einige Flags/Einstellungen verlassen kann, die die Klasse NumericUpDown
bereits bietet.
Wenn Ihre Lösung Sub-Classing NumericUpDown
umfasst, dann muss ich darüber nachdenken. In diesem Stadium der Veröffentlichung würde ich einen gut dokumentierten Hack einer sauberen Änderung vorziehen, die an anderer Stelle Fehler verursachen könnte. Ich hätte gerne die Möglichkeit, die NumericUpDown
nicht zu unterteilen.
Lassen Sie mich wissen, wenn Sie Fragen haben, danke.
Andrei, könnten Sie genauer auf WIE das tun? Genauer - welches Ereignis sollte ich abfangen? Ich möchte nicht, dass Benutzer überhaupt denken, dass sie nicht ganzzahlige Werte eingeben können. Ich * könnte * den Wert runden, aber ich möchte auch nicht, dass sie 0,7 eingeben können - ich möchte, dass die Validierung fehlschlägt. –
Sie sollten den Wert überall dort runden, wo Sie ihn verwenden. Oder wenn Sie ein Ereignis abfangen (und einen kleinen Hack hinzufügen möchten), können Sie das ValueChanged-Ereignis abfangen und hier den Wert auf den Runden-Teil ändern (nur wenn es nicht bereits gerundet ist - um eine Endlosschleife zu vermeiden!) –
Hm ... ist es besser als das TextChanged-Ereignis zu hacken? Ich möchte den Wert nicht stillschweigend korrigieren - ich möchte, dass der Benutzer irgendwie weiß, dass seine Eingabe nicht akzeptiert wird. –