舟山做网站的公司/深圳开发公司网站建设
封装了一个可显示value的trackBar控件,value还是设置的1-10,只是显示时会根据设好的最大值和最小值显示出来不同的数
样式:
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace AnTouch.UI.WinForms.Controls
{public partial class UCTrackBar : UserControl{public UCTrackBar(){InitializeComponent();trackBar_MouseCaptureChanged(null, null);}private EventHandler _valueChangeEvent;[Description("滚动改变事件"), Category("自定义")]public EventHandler ValueChangeEvent{get{return _valueChangeEvent;}set{_valueChangeEvent += value;}}private double _minValue = 1;/// <summary>/// 滑块的最小值/// </summary>public double MinValue{get{return _minValue;}set{_minValue = value;label.Text = value.ToString("f4");}}private double _maxValue = 10;/// <summary>/// 滑块的最大值/// </summary>public double MaxValue{get{return _maxValue;}set{_maxValue = value;}}private double _labelText = 0;public double LabelText{get{return _labelText;}set{_labelText = value;label.Text = value.ToString("f4");}}/// <summary>/// 值改变时触发函数/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void trackBar_MouseCaptureChanged(object sender, EventArgs e){LabelText = (_maxValue - _minValue) / 10 * (trackBar.Value - 1) + _minValue;if (trackBar.Value == 1)LabelText = _minValue;if (trackBar.Value == 10)LabelText = _maxValue;}private void trackBar_MouseDown(object sender, MouseEventArgs e){trackBar_MouseCaptureChanged(sender, e);}private void trackBar_MouseHover(object sender, EventArgs e){trackBar_MouseCaptureChanged(sender, e);}private void trackBar_Scroll(object sender, EventArgs e){trackBar_MouseCaptureChanged(sender, e);}private void trackBar_ValueChanged(object sender, EventArgs e){if (ValueChangeEvent != null){_valueChangeEvent(sender, e);}}}
}
本来我是把显示数值的label放在光标上方了,会根据滑块滑走的动作跟着滑动,但是有个问题就是显示的数位太多,放在别的控件里容易被挡住,所以就放在了固定的位置,根据鼠标动作显示或消失
如果要设成可移动的,只需要在trackBar_MouseCaptureChanged里通过计算改变Label的Location就可以了,计算公式是根据Value的值算的,很好推,我就不写了