HScrollBar浅析
来源:互联网 发布:迅雷下载速度插件mac 编辑:程序博客网 时间:2024/05/21 23:07
HScrollBar是水平滚动轴,与VscrollBar类似,在不内置支持翻页滚动的窗口中,经常有使用的需求。然而,要合理的控制使用HScrollBar并不是一件很容易的事情。HScroollBar有两个事件hScrollBar1_Scroll和hScrollBar1_ValueChanged,有一句笼统的概括这两个事件的使用时机:在移动过程中的处理放在_Scroll事件,在移动后处理放在_ValueChanged事件。这句话太笼统了,而且不是很准确,往往不能满足实际的使用需要。
1. hScrollBar1_ValueChanged(objectsender, EventArgs e)事件
当hScrollBar1.Value值改变时触发此事件,有两种途径:a>点击、拖动滚动条触发hScrollBar1_Scroll事件,从而引起hScrollBar1.Value值改变;b>直接设置hScrollBar1.Value值,如hScrollBar1.Value = 27。
2. hScrollBar1_Scroll(objectsender, ScrollEventArgs e)事件
当点击左右箭头、左右翻页、拖动滚动条时,会触发hScrollBar1_Scroll事件。这里的形参e有几个属性需要注意。
a>e.ScrollOrientation 获取Scroll滚动方向;
b> e.OldValue 获取旧的hScrollBar1.Value值;
c> e.NewValue 获取或设置新的hScrollBar1.Value值;
d> e.Type 获取发生的滚动事件类型。
public enum ScrollEventType //e.Type类型
{
SmallDecrement = 0, //上换行,Value变化了SmallChange量
SmallIncrement = 1, //下换行,Value变化了SmallChange量
LargeDecrement = 2, //上翻页,Value变化了LargeChange量
LargeIncrement = 3, //下翻页,Value变化了LargeChange量
ThumbPosition = 4, //滚动框停止拖动
ThumbTrack = 5, //滚动框当前正移动
First = 6, //滚动框被移动至Minimum位置—本人未发现
Last = 7, //滚动框被移动至Maximum位置—本人未发现
EndScroll = 8, //滚动停止
}
3. 基本属性
Value //获取或设置当前位置
LargeChange //获取或设置最大移动量
SmallChange //获取或设置最小移动量
Maximum //获取或设置最大值
Minimum //获取或设置最小值
a> 假设移动范围是100,如果Minimum=0,那么Maximum应该是99,而不是100;
b> 颜色值选择实例
this.hScrollBar1.SmallChange = 1;
this.hScrollBar1.LargeChange = 16;
this.hScrollBar1.Minimum = 0;
this.hScrollBar1.Maximum = 255 +this.hScrollBar1.LargeChange - 1;
假设换行跨度为1,翻页跨度为16,最小值为0,那么颜色值范围(0~255)的最大值怎么设置?注意,是255加上一页的范围再减1。因为Value的位置是页的左边,而最大值在页的右边。
4. 综合实例
a> 点击某按钮,改变Value值,触发的事件及顺序
private void btnChange_Click(object sender, EventArgse)
{
this.hScrollBar1.Value = 27;
}
只触发一个事件:
ValueChanged Event--Value = 27
b> 点击右键右换行,触发的事件及顺序
触发了三个事件,先SmallIncrement Event,此时Value值未改变;接着ValueChanged Event,Value发生了改变;最后EndScroll Even。
SmallIncrement Event--Value = 0
ValueChanged Event--Value = 1
EndScroll Event--Value = 1
c> 拖动滚动框,触发的事件及顺序
如下所示,拖动过程中,不断触发ThumbTrack Event事件,每当Value值改变时,触发ValueChanged Event事件,如快速拖动每次值可能会大于SmallChange(这里是1),拖动停止时触发ThumbPosition Event事件,最后触发EndScroll Event事件。
ThumbTrack Event--Value = 1
ThumbTrack Event--Value = 1
ValueChanged Event--Value = 4
ThumbTrack Event--Value = 4
ValueChanged Event--Value = 7
ThumbTrack Event--Value = 7
ValueChanged Event--Value = 11
ThumbTrack Event--Value = 11
ValueChanged Event--Value = 15
ThumbTrack Event--Value = 15
ValueChanged Event--Value = 20
ThumbTrack Event--Value = 20
ValueChanged Event--Value = 23
ThumbTrack Event--Value = 23
ValueChanged Event--Value = 26
ThumbTrack Event--Value = 26
ValueChanged Event--Value = 29
ThumbTrack Event--Value = 29
ValueChanged Event--Value = 30
ThumbTrack Event--Value = 30
ValueChanged Event--Value = 31
ThumbPosition Event--Value = 31
EndScroll Event--Value = 31
d> 右翻页,触发事件及顺序
如下所示,与下换行一样,触发了三个事件,先LargeIncrementEvent,此时Value值未改变,OldValue也未变,NewValue已经改变了;接着ValueChanged Event,Value发生了改变;最后EndScroll Even时,进入Scoll函数Value和OldValue已经边改了。
Enter Scroll--Value = 3, OldValue = 3,NewValue = 13
LargeIncrement Event--Value = 3,OldValue = 3, NewValue = 13
Leave Scroll--Value = 3, OldValue = 3,NewValue = 13
ValueChanged Event--Value = 13
Enter Scroll--Value = 13, OldValue = 13,NewValue = 13
EndScroll Event--Value = 13, OldValue =13, NewValue = 13
Leave Scroll--Value = 13, OldValue = 13,NewValue = 13
5. 总结
a> 如果响应代码放在hScrollBar1_ValueChanged中,有时就不能随意设置Value值,否则会触发多余的hScrollBar1_ValueChanged事件;如果不需要动态直接修改Value值,下面是一个好的选择。
private int _OldValue = 0;
private void btnChange_Click(object sender, EventArgs e)
{
MyFunScrollLines(this.hScrollBar1.Value - _OldValue);
_OldValue = this.hScrollBar1.Value;
}
b> 响应代码最好不要笼统的放在hScrollBar1_Scroll中,应该区分ScrollEventType类型,否则会触发两次hScrollBar1_Scroll事件。下面也是一种很好的换行翻页。
private void hScrollBar_Scroll(object sender, ScrollEventArgs e)
{
if (e.NewValue != e.OldValue)
{
this.curveChart1.ScrollLine(e.NewValue- e.OldValue);
}
//switch (e.Type)
//{
// case ScrollEventType.LargeIncrement:
// Console.WriteLine("LargeIncrement Event--Value = {0}",hScrollBar1.Value);
// break;
// case ScrollEventType.LargeDecrement:
// Console.WriteLine("LargeDecrement Event--Value = {0}", hScrollBar1.Value);
// break;
// case ScrollEventType.SmallIncrement:
// Console.WriteLine("SmallIncrement Event--Value = {0}",hScrollBar1.Value);
// break;
// ......
//}
}
c> Value最大值 = Maximum – LargeChange + 1。
- HScrollBar浅析
- Flex样式-HScrollBar篇
- C# Panel 中加入 hScrollBar
- winform VScrollBar ,HScrollBar的使用
- hScrollBar控件中maxValue属性细节问题
- C#--HScrollBar与VScrollBar的滚动问题
- TextBox和HscrollBar组合实现自动范围控制
- C#—VScrollBar和hScrollBar的用法 控制图片
- WINFORM vscrollbar 和 hscrollbar的一些重要属性说明
- vb(2) picturebox、hscrollbar、vscrollbar实现滚动浏览
- 浅析
- 浅析
- winform控件学习(2)—HScrollBar控件和MaskedTextBox控件
- 电子邮件浅析
- 浅析GLib
- 浅析激光打印机
- NPetsShop浅析
- 嵌入式 浅析
- 函数对象
- C语言运算符优先级与结合性
- Java网络编程(22):实现HTTP模拟器
- 40.给字符串s1、s2,在s1中找包含s2里所有字符的最小子串
- 位运算简介及实用技巧(一):基础篇
- HScrollBar浅析
- Eclipse快捷键指南
- Java网络编程(23):HTTP消息头字段
- C/C++常见面试题
- 数据处理
- GestureDetector.OnGestureListener 详解
- 娱乐:全方位戒除网瘾 如果你真的想告别WOW
- spring.net 事务 不起作用 总结(自己遇到的)
- python与oracle(一)基本配置