Sie haben zwei Probleme. Zuerst benötigt Opacity
einen doppelten, keinen Dezimalwert. Der Compiler weist Sie darauf hin, dass es zwar eine Konvertierung zwischen Dezimal und Doppel gibt, es sich jedoch um eine explizite Konvertierung handelt, die Sie angeben müssen, damit sie funktioniert. Der zweite ist, dass TrackBar.Value
ein ganzzahliger Wert ist und ein int durch einen int zu einem int führt, unabhängig davon, welcher Typ von Variable Sie ihm zuweisen. In diesem Fall gibt es eine implizite Umwandlung von int in dezimal oder double - weil es keinen Genauigkeitsverlust bei der Umwandlung gibt - also reklamiert der Compiler nicht, aber der Wert, den Sie bekommen, ist immer 0, vermutlich, da trackBar.Value
ist immer weniger als 5000. Die Lösung besteht darin, den Code so zu ändern, dass Double (der native Typ für Opazität) verwendet wird, und Fließkomma-Arithmetik auszuführen, indem die Konstante explizit verdoppelt wird - was die Arithmetik fördert - oder Casting trackBar.Value
verdoppelt , die das Gleiche tun - oder beides. Oh, und Sie brauchen die Zwischenvariable nicht, wenn sie nicht woanders verwendet wird. Ich schätze, der Compiler würde es sowieso optimieren.
trackBar.Opacity = (double)trackBar.Value/5000.0;
auch Dezimal kann nicht so breit Wert als Double darstellen. Dezimal kann nur bis zu +/- 7.9228162514264337593543950335E + 28; während ein Double kann bis zu +/- 1.79769313486232E + 308 – TraumaPony