2010-01-22 10 views
8

Bir TrackBar denetimi kullanıyorum. Varsayılan olarak değerleri int32'dur. Ondalık değerleri kullanmak isterim, böylece kullanım daha ayrıntılı bir seviyede seçilebilir. Float kabul etmek için TrackBar kontrolünü nasıl alabilirim?TrackBar ile şamandıralar nasıl kullanılır

+0

Tamsayı size 2 milyar olası değerleri verir. Bu kontrol için ne kadar daha fazla ihtiyacınız var? – Kibbee

+0

Tam olarak değerler değil. Nasıl temsil edildikleri. Müşteri, ondalık formda temsil edilmesini ister. – rross

cevap

18

Bir çarpan kullanabilirsiniz. Örneğin, TrackBar kontrolünüzü 0 - 5 arası 0,01'lik artışlarla yapmak istediğinizi varsayalım. Minimum değerini 0 olarak ayarlayın, Maksimum değerini 500 olarak ayarlayın ve artırın 1.

Float değerinizi ayarladığınızda, 100 ile çarpın ve TrackBar değeri için kullanın.

TrackBar, ints ile çalıştığından ve Int32'nin tam veri aralığına sahip olduğundan, bu şekilde herhangi bir (gerçekçi) hassasiyet derecesi elde edebileceksiniz. Bu, bir kullanıcı arabiriminin gerektirdiğinden çok daha hassastır.

+0

Harika çözüm. Harika çalışıyor. – rross

4

başka bir fikir TrackBar den inherit olacaktır ve Reed Copsey int'leri kullanabilir ve hassas faktörü ile çarpmak için önerilen şekilde özel bir sınıfta float değerleri simüle. küçük şamandıra değerleri için oldukça düzgün

aşağıdaki çalışır:

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

Gerçekten güzel bir çözüm! Kabul edilen cevap gibi, ama kendi sınıfında. Teşekkür ederim! – itmuckel