Sie haben zwei Probleme.
Erstens, Opacity
erfordert einen Double- und keinen Dezimalwert. Der Compiler teilt Ihnen mit, dass es zwar eine Umwandlung zwischen Dezimal- und Double-Werten gibt, dass es sich aber um eine explizite Umwandlung handelt, die Sie angeben müssen, damit sie funktioniert.
Zweitens, TrackBar.Value
ist ein Integer-Wert und die Division eines int durch einen int ergibt einen int, unabhängig davon, welcher Art von Variable Sie ihn zuweisen. In diesem Fall gibt es eine implizite Umwandlung von int in decimal oder double, da es bei der Umwandlung keinen Präzisionsverlust gibt. Der Compiler beschwert sich also nicht. Aber der Wert, den Sie erhalten, ist immer 0, vermutlich, weil trackBar.Value
ist immer kleiner als 5000.
Die Lösung besteht darin, den Code so zu ändern, dass double (der native Typ für Opacity) verwendet wird, und die Fließkomma-Arithmetik durchzuführen, indem die Konstante explizit zu double gemacht wird, was zur Folge hat, dass die Arithmetik oder das Casting beschleunigt wird trackBar.Value
zu verdoppeln, was das Gleiche bewirkt oder beides. Sie brauchen die Zwischenvariable nicht, es sei denn, sie wird anderweitig verwendet. Ich vermute, dass der Compiler sie ohnehin wegoptimieren würde.
trackBar.Opacity = (double)trackBar.Value / 5000.0;
20 Stimmen
Außerdem kann Decimal keinen so großen Wert wie Double darstellen. Decimal kann nur bis zu +/-7.9228162514264337593543950335E+28 gehen, während Double bis zu +/-1.79769313486232E+308 gehen kann.
4 Stimmen
@TraumaPony es ist ein
trackbar
. Es ist unwahrscheinlich, dass jemals ein so hoher Wert fürtrackbar
6 Stimmen
Mir wurde immer gesagt, es sei besser, mit 0,0002 zu multiplizieren als durch 5000 zu teilen.
13 Stimmen
Fun Fact: Dies ist die 4. Frage (die erste ist nur noch sichtbar) auf Stack Overflow
3 Stimmen
Es ist lächerlich, wie diese Fragen immer wieder umgeschrieben werden, und zwar in etwas ganz anderes. Stoppt diesen Wahnsinn.
1 Stimmen
"trans" ist wahrscheinlich für " Transparenz " (aus eine Antwort ?), das Gegenteil von Opazität angegeben durch den Variablennamen "Opazität" .
6 Stimmen
Diese Frage erhielt neue Aufmerksamkeit durch die jüngste Meta-Frage Was war der älteste Tag auf Stack Overflow? . Diese Frage ist berühmt, denn sie ist die älteste überlebende Frage und damit der älteste Sprache Tag ist C#.