多个TrackBar控件联动设置百分比
来源:互联网 发布:特大城市xl mac 编辑:程序博客网 时间:2024/06/05 09:15
http://blog.csdn.net/luols/article/details/22782929
我们有时候需要设计一个比重设置,当然几个比重合计之和肯定要100%,就这么一个简单的需求,换成是你,你会如何设计?个数不确定,另一个则是要保证100%。设计这样的方案困扰了我好几天,最开始设计了几个下拉框,但因操作不方便被痛批好几次,我不知道有没现成的资源可用,山穷水尽后想到TrackBar控件,虽然不能说这是最好的,但起码操作起来还算方便,多个TrackBar联动控制最大的难点在于如何保证几个TrackBar的值之和为100%
我的思路是这样:滑动前面的滑块会对后面的几个产生影响,而且后面几个的值只能平均分配;但当滑动后面的滑块则对前面的没有任何影响,否则将陷入“死循环”,不多说了,先上最终效果图
我这里设计了一个UserControl,里面放置三个控件:GroupBox/Label/TrackBar,Label用来显示当前百分比,GroupBox用来显示标签,外部可以通过这个标签来获取当前的百分比,下面是UserControl源代码
- public partial class UserControl1 : UserControl
- {
- /// <summary>
- /// 标签
- /// </summary>
- public string UCName
- {
- get { return groupBox1.Text; }
- set { groupBox1.Text = value; }
- }
- /// <summary>
- /// 刻度值
- /// </summary>
- public int TickValue
- {
- get { return trackBar1.Value; }
- set {
- trackBar1.Value = value;
- label1.Text = string.Format("{0}%", trackBar1.Value);
- }
- }
- //声明事件委托
- public delegate void MyScrollHandler(object sender);
- //定义事件
- public event MyScrollHandler OnTrackBar_Scroll;
- public UserControl1()
- {
- InitializeComponent();
- label1.Text = string.Format("{0}%", trackBar1.Value);
- }
- private void trackBar1_Scroll(object sender, EventArgs e)
- {
- if (OnTrackBar_Scroll != null)
- {
- OnTrackBar_Scroll(this);
- label1.Text = string.Format("{0}%", trackBar1.Value);
- }
- }
- }
- /// <summary>
- /// TrackBar数量
- /// </summary>
- int tbCount = 4;
- public Form1()
- {
- InitializeComponent();
- }
- protected override void OnLoad(EventArgs e)
- {
- base.OnLoad(e);
- ArrayList al = new ArrayList();
- for (int i = 1; i <= tbCount; i++)
- {
- UserControl1 uc = new UserControl1();
- uc.UCName = "TrackBar" + i;
- uc.TickValue = 100 / tbCount; //默认平均数
- uc.Tag = i; //标识第几个
- uc.Dock = DockStyle.Top;
- uc.OnTrackBar_Scroll += new UserControl1.MyScrollHandler(uc_OnTrackBar_Scroll);
- al.Add(uc);
- }
- al.Reverse(); //反序使得UC按标识顺序添加到容器上
- foreach (UserControl1 uc in al)
- {
- this.panel1.Controls.Add(uc);
- }
- }
- /// <summary>
- /// 滑块联动控制(核心)
- /// </summary>
- /// <param name="sender"></param>
- private void uc_OnTrackBar_Scroll(object sender)
- {
- int leftPct = 100;
- UserControl1 uc = sender as UserControl1;
- int tag = Convert.ToInt32(uc.Tag);
- for (int i = 0; i < tbCount; i++)
- {
- UserControl1 ucc = this.panel1.Controls[(tbCount - 1) - i] as UserControl1;
- int t = Convert.ToInt32(ucc.Tag);
- if (t > tag) //后面几个的百分比平均分配
- {
- ucc.TickValue = leftPct / (tbCount - tag);
- }
- else //获取剩余百分比
- {
- leftPct -= ucc.TickValue;
- if (leftPct <= 0 && t == tag) //当前滑块,控制剩余百分比不小于0
- {
- ucc.TickValue += leftPct;
- leftPct = 0;
- }
- }
- }
- }
0 0
- 多个TrackBar控件联动设置百分比
- [C#]多个TrackBar控件联动设置百分比
- droid 设置控件百分比宽度
- 多个select联动(省市二级联动)
- Chart控件,把Y轴设置成百分比
- asp.net后台设置控件百分比的长度
- C#ProgressBar控件和 TrackBar控件
- ProgressBar控件和 TrackBar控件
- scrollView 设置多个控件的方法
- C# 实现TrackBar控件美化换肤
- RadioButton,CheckBox,TrackBar控件的使用
- Easyui 多个标签联动
- 关于多个spinner联动
- 球形水波百分比控件
- 扇形百分比控件
- 多个下拉框内容联动
- DBD多个组件间连环联动
- jquery 多个checkbox的联动选择
- Think in Java反刍笔记(3)---对象是什么(3)
- 一站式学习Wireshark(一):Wireshark基本用法
- spring下整合配置redis
- 【.Net码农】WinForm如何调用Web Service
- Android Studio系列教程三--快捷键
- 多个TrackBar控件联动设置百分比
- 【C++】创建动态的文本编辑框
- 左右滑动切换Activity_绑定SIM_BroadcastReceiver监听手机重启
- 2013年中国科技大学培东实验班数学面试试题
- expect-学习文档
- 击中击不中理解
- 正则表达式matcher.group用法
- Android Studio系列教程四--Gradle基础
- Android - OnTouchListener