2010-01-22 18 views
8

Estoy usando un control TrackBar. Por defecto, sus valores son int32. Realmente me gustaría usar valores decimales para que el uso pueda seleccionar en un nivel más granular. ¿Cómo puedo obtener el control TrackBar para aceptar flotadores?Cómo usar flotadores con TrackBar

+0

entero le da 2 mil millones de valores posibles. ¿Cuánto más granular necesita para este control? – Kibbee

+0

No son exactamente los valores. Es cómo están representados. El cliente quiere el representado en forma decimal. – rross

Respuesta

18

Puede usar un multiplicador. Digamos, por ejemplo, que quería hacer que su control TrackBar vaya de 0 a 5 con incrementos de 0.01. Simplemente configure el Mínimo a 0, el Máximo a 500, e incremente por 1.

Cuando vaya a establecer su valor flotante, multiplíquelo por 100, y úselo para el valor de Barra de seguimiento.

Debe ser capaz de obtener cualquier grado de precisión (realista) de esta manera, ya que la barra de desplazamiento funciona con ints, y tiene el rango de datos completo de Int32 disponible. Esto es mucho más preciso de lo que requiere una interfaz de usuario.

+0

Gran solución. Funciona genial. – rross

4

Otra idea sería hereda de TrackBar y simular valores de coma flotante en una clase personalizada de la manera Reed Copsey sugiere utilizar enteros y se multiplica con un factor de precisión.

Los siguientes trabajos con buena pinta para pequeños valores de coma flotante:

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); } } 
} 
+0

¡Una solución realmente agradable! Es como la respuesta aceptada, pero en su propia clase. ¡Gracias! – itmuckel