2010-01-22 94 views
8

我正在使用TrackBar控件。默認情況下,它的值是int32。我真的很想使用十進制值,因此可以使用更細粒度的級別進行選擇。我怎樣才能讓TrackBar控件接受浮動?如何使用跟蹤欄的花車

+0

整數給出你2個十億可能的值。您需要多大的粒度才能實現這種控制? – Kibbee 2010-01-22 02:09:59

+0

它不完全是值。這是他們如何表現。客戶希望以十進制形式表示。 – rross 2010-01-22 18:01:36

回答

18

您可以使用乘數。比如說,你想讓你的TrackBar控制從0到5以0.01爲增量。僅僅通過1

當你去設置你的浮點值,乘以100它,並用它爲跟蹤條值設置最低爲0,最高爲500,增量。

您應該能夠以這種方式獲得任何(逼真)的精度,因爲TrackBar可以與int整合使用,並且具有Int32的完整數據範圍。這比用戶界面要求的精確得多。

+0

偉大的解決方案。很棒。 – rross 2010-01-22 18:00:35

4

另一種想法是繼承TrackBar並以Reed Copsey建議使用整數和乘以精度因子的方式模擬自定義類中的浮點值。

下面的作品整齊漂亮的小浮點值:

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

一個非常好的解決方案!這就像接受的答案,但在它自己的課堂上。謝謝! – itmuckel 2016-07-22 15:09:25