Comment utiliser les flotteurs avec TrackBar

J’utilise un contrôle TrackBar . Par défaut, ses valeurs sont int32 . Je voudrais vraiment utiliser des valeurs décimales pour que l’utilisation puisse être sélectionnée à un niveau plus granulaire. Comment puis-je obtenir que le contrôle TrackBar accepte les flottants?

Vous pouvez utiliser un multiplicateur. Supposons, par exemple, que vous souhaitiez que votre contrôle TrackBar passe de 0 à 5 avec des incréments de 0,01. Il suffit de définir le minimum à 0, le maximum à 500 et l’incrémenter de 1.

Lorsque vous définissez votre valeur float, multipliez-la par 100 et utilisez-la pour la valeur TrackBar.

Vous devriez pouvoir obtenir n’importe quel degré de précision (réaliste) de cette manière, car la TrackBar fonctionne avec ints et dispose de la plage de données complète de Int32. C’est beaucoup plus de précision qu’une interface utilisateur ne nécessite.

Une autre idée consisterait à hériter de TrackBar et à simuler des valeurs float dans une classe personnalisée, comme l’a suggéré Reed Copsey pour utiliser ints et multiplier avec un facteur de précision.

Ce qui suit fonctionne plutôt bien pour les petites valeurs float:

 class FloatTrackBar: TrackBar { private float precision = 0.01f; public float Precision { get { return precision; } set { precision = value; // todo: update the 5 properties below } } public new float LargeChange { get { return base.LargeChange * precision; } set { base.LargeChange = (int) (value / precision); } } public new float Maximum { get { return base.Maximum * precision; } set { base.Maximum = (int) (value / precision); } } public new float Minimum { get { return base.Minimum * precision; } set { base.Minimum = (int) (value / precision); } } public new float SmallChange { get { return base.SmallChange * precision; } set { base.SmallChange = (int) (value / precision); } } public new float Value { get { return base.Value * precision; } set { base.Value = (int) (value / precision); } } }