Laden...

Wie kann ich mit dem WPF-Slider-Control den kompletten Double-Bereich abdecken?

Erstellt von pinki vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.183 Views
pinki Themenstarter:in
709 Beiträge seit 2008
vor 7 Jahren
Wie kann ich mit dem WPF-Slider-Control den kompletten Double-Bereich abdecken?

Hallo zusammen,

ich würde gern einen Double-Wert per Slider setzen können.
Das Problem ist jetzt, dass der Slider dies nicht kann, obwohl die Minimimum- und die Maximum-Property vom Typ double sind.

Mit folgendem Code ist der Slider nicht mehr zu gebrauchen:

DoubleSlider.Maximum = double.MaxValue;
DoubleSlider.Minimum = double.MinValue;

Kennt ihr ein (am besten kostenfreies) Slider-Control, mit dem ich den kompletten Double-Bereich abdecken kann oder könnt mir die Grenzen sagen, bis zu denen das Slider-Control funktioniert?

Gruß
Micha

D
985 Beiträge seit 2014
vor 7 Jahren

Das Problem ist wohl nicht der Min- oder Max-Wert an sich, sondern der riesige Bereich den du abdecken willst.

Wie ist denn die Schrittweite eingestellt und hast du auch genug Pixel auf dem Schirm um diese ganzen Pixel darstellen zu können?

Bei einem Bereich von 0..100 mit der Schrittweite 1 benötigst du min. 101 Pixel um auch jeden Wert einstellen zu können.

Im RealLife würde man ein Drehknopf verwenden und eine Möglichkeit die Schrittweite für den Drehimpuls zu erhöhen oder zu verringern. Dann kann man mit einer hohen Schrittweite erstmal in die grobe Richtung fahren und dann mit der niedrigen Schrittweite die Feinjustage erledigen.

Oder schau dir auf iPhone/iPad mal ein Video an. Den Slider kann man auf ganz fein justieren, wenn man den Finger beim sliden weiter weg zieht.

pinki Themenstarter:in
709 Beiträge seit 2008
vor 7 Jahren

Um Genauigkeit beim Setzen geht es mir dabei nicht.
Ich fänd's halt super, wenn ich mir den Variablenwert dort darstellen lassen könnte.
In dem Programm wird dieser Wertebereich wahrscheinlich nie verwendet werden, aber ich hätte es trotzdem toll gefunden, wenn es ginge.

Wenn ich die Grenzen jeweils mit 0.1 multipliziere, ist der Bereich ja immer noch riesig, dort funktioniert der Slider jedoch bestens.

Edit:
Durch Probieren habe ich gerade festgestellt, dass der Bereich von double.MinValue bis double.MinValue + 100 auch nicht geht.
In dem Fall dürfte es nicht am dargestellten Bereich liegen.

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

ich habe mal gerade etwas damit experimentiert.

Von Double.MinValue asl Minimum bis 0 als Maximum gibt es keine Probleme, ebenso von 0 als Minimum bis Double.MaxValue als Maximum
Wenn ich allerdings als Maximum den MaxValue setze, spinnt der Slider sobald der MinValue unter -1e291 geht. Bis dahin funktioniert er bei mir.

Ich denke, die Berechnungen finden alle mit double-Werten statt, deshalb muss der gesamte Bereich (also die Differenz zwichen Maximum und Minimum) vermutlich zumindest mal durch einen Double darstellbar sein. Ist aber nur eine Vermutung, belegen kann ich das nicht und genau nachgerechnt hab ich jetzt auch nicht.

Gruß, MarsStein

Edit: durch einen Double darstellbar ist ist ja Unsinn - dann würde das ja so nicht funktionieren wie gerade beschrieben. Trotzdem muss der Bereich wiohl so geartet sein, dass damit (möglicherweise auch abhängig von der Länge des Sliders) noch vernünftig Berechnungen im Double-Bereich durchgeführt werden können.

Fraglich ist, wofür das gut sein soll. Die Auflösung des Sliders hängt an der Pixelgröße, mehr brauicht man theoretisch nicht um von da aus linear auf den gesamten Double-Bereich durch einfache Rechnung zu skalieren.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

5.658 Beiträge seit 2006
vor 7 Jahren

Hi pinki,

Fraglich ist, wofür das gut sein soll. Die Auflösung des Sliders hängt an der Pixelgröße, mehr brauicht man theoretisch nicht um von da aus linear auf den gesamten Double-Bereich durch einfache Rechnung zu skalieren.

Da stimme ich zu. Zum Einstellen eines Wertes durch den Benutzer taugt die Lösung nicht. Wenn es nur um die Anzeige geht, würde ich eine ProgressBar verwenden. Das Umrechnen zwischen Wert, Wertebereich und angezeigten Prozentsatz ist auch nur ein einfacher Dreisatz.

Weeks of programming can save you hours of planning

pinki Themenstarter:in
709 Beiträge seit 2008
vor 7 Jahren

Hallo zusammen,

der Slider befindet sich in einem Programm, mit dem man Variablen auf einem embedded System setzen kann.
Der Slider kann mit einer Variablen verknüpft werden und zeigt dann entweder den Wert an oder setzt ihn.
Nach dem Verknüpfen einer Variablen wird der Wertebereich des Typen als Grenze des Sliders gesetzt.
Normalerweise stellt man den Wertebereich aber danach selbst ein.
Mich hätte es jetzt nur gefreut, wenn das bei double-Variablen auch so funktioniert hätte.

P
19 Beiträge seit 2016
vor 7 Jahren

Wenn es dir nicht um die Genauigkeit geht, nimm doch einfach die werte
MIN: -1d
MAX: 1d

Und Multipliziere einfach Double.MaxValue mit dem eingestellten wert