Numericupdown-Mausrad-Ereignisses erhöht decimal mehr als eine Stufe
Ich versuche zu überschreiben, die Mausrad-Steuerung, so dass, wenn Sie das Mausrad nach oben bzw. unten bewegt, es erhöht sich nur der Wert in der numericupdown-Feld 1. Ich glaube, es ist derzeit die mit dem, was gespeichert ist in der Systemsteuerung und erhöhen/verringern Sie den Wert von 3 zu jeder Zeit.
Ich bin mit dem folgenden code. Auch wenn numberOfTextLinesToMove ist nur 1, und ich sehe, dass txtPrice.Wert ist immer aufgefüllt, als erwartet, ist etwas anderes überschreiben, da der Wert ich eingestellt habe, ist nicht das, was angezeigt wird in der numericupdown-box
void txtPrice_MouseWheel(object sender, MouseEventArgs e)
{
int numberOfTextLinesToMove = e.Delta / 120;
if (numberOfTextLinesToMove > 0)
{
txtPrice.Value = txtPrice.Value + (txtPrice.Increment * numberOfTextLinesToMove);
}
else
{
txtPrice.Value = txtPrice.Value - (txtPrice.Increment * numberOfTextLinesToMove);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein Fehler, über die hier berichtet: NumericUpDown - verwenden der Maus-Rad kann das Ergebnis in verschiedenen Inkrement -
Microsoft ' s Antwort im Februar 2007 erklärt, Sie kann nicht auf das Visual Studio 2008.
Gibt es zwei workarounds gepostet, die beide Unterklasse
NumericUpDown
. Überprüfen Sie die Problemumgehung auf die Registerkarte link.Die, die ich versuchte für mich gearbeitet (geschrieben von 'NanoWizard'):
protected override void OnMouseWheel(MouseEventArgs e) { decimal newValue = Value; if (e.Delta > 0) newValue += MouseWheelIncrement; else newValue -= MouseWheelIncrement; if (newValue > Maximum) newValue = Maximum; else if (newValue < Minimum) newValue = Minimum; Value = newValue; }
Increment
- Eigenschaft-Wert. Vielleicht ein gutes Thema für eine Raymond Chen blog?Ich hatte kürzlich dieses problem, und habe um es durch die änderung der Schrittweite.
Edit: Das ist nur eine gute Lösung, wenn Sie beabsichtigen, verwenden Sie nur das mousewheel um den Wert zu ändern. Um dies zu beheben für alle Situationen, die Sie haben, um das überschreiben der Klasse. Hier ist eine einfache version.
if (e.Delta > 0 && (this.Value + this.Increment) <= this.Maximum)
undelse if (e.Delta < 0 && (this.Value - this.Increment) >= this.Minimum)
.Nahm ich Hans Passant Beratung und Unterklassen
NumericUpDown
um diese Funktionalität hinzuzufügen. Es verwendet eine modifizierte version der Reflektor ist code für das OnMouseWheel-Methode. Hier ist was ich landete mit für alle die es interessiert.Den user3610013 Antwort, funktioniert sehr gut. Dies ist eine leichte Modifikation und kann nützlich sein, um jemanden.
Nach der Suche auf ähnliche Fragen, die ich entdeckte, dass Sie können auch umgehen dieses ohne Erstellung einer Unterklasse - zum Beispiel, diesen code geben Sie ein numericUpDown, die nur einen Bildlauf durch eine (und nur, wenn das Steuerelement den Fokus hat).
Einrichten der Delegierten in den container constructor:
... definieren Sie dann die Funktion an anderer Stelle in der Klasse:
Sollten Sie auch überprüfen, um sicherzustellen, dass Sie nicht versuchen, um zu Blättern aus der control-Reihe, denn das wird Absturz.
Basierend auf Jay Riggs Antwort, hier ist eine sauberere version (meiner Meinung nach):
Dem folgenden code wird hinunter Ihre gesamte Form und fixieren Sie jeden decendent NumericUpDown-Steuerelement.
Umgeschrieben, basierend auf diese
und diese
fügen Sie den folgenden code, um Ihre Klasse (oder einige utility-Klasse):
dann im contructor der form, nach
InitializeComponent()
, Zeile einfügen: