最近在做一个鼠标经过弹出 TreeView  面板功能 , 要求鼠标离开TreeView区域,隐藏面板。 功能如期开发,其中当TreeView 出现滚动条时,鼠标经过TreeView中的滚动条时,提前隐藏。 原因: TreeView 中将 滚动区域视为非已部份。因此鼠标经过该区域,触发  MouseLeave 事件,但滚动区域没有显示声明 MouseEnter , MouseLeave 的入口 , 因此无法在触发MouseLeave(隐藏动作) 后即时触发 滚动区域的MouseEnter(显示面版)事件。

因此禁用TreeView Scroll 功能,外层使用Panel, Panel 同时禁用Scroll 功能(只做容器), Scroll 功能由 VScrollBar 实现滚动功能,通过设置 TreeView.Top 值。

因此,需要做如下工作:

1. 手动计算TreeView 内容高度,并将高度值赋给 TreeView.Height.

2.将VScrollBar Maxnum 值设为 TreeView.Height - Panel.Height

3. 设置VScrollBar 中的ValueChange 事件,将 value 赋给 TreeView.top

private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
//e.NewValue 值达不到 vScrollBar1.Maximum ???
if (vScrollBar1.Maximum - e.NewValue <= 10)
{
treeView1.Top = vScrollBar1.Maximum * -1;
}
else {
treeView1.Top = e.NewValue * -1;
}
}

其中 VScrollBar  Value 值最大时,总是小预设的 Maximum值,因此即使滚动到底部,也总有一部份内容不可视。因此,采用折中方式,如果滚动到底部时,VScrollBar Value  值 与 Maximum之差小于 10 px , 将 当前滚动值视为 Maximum 值

 private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
//e.NewValue 值达不到 vScrollBar1.Maximum ???
if (vScrollBar1.Maximum - e.NewValue <= )
{
treeView1.Top = vScrollBar1.Maximum * -;
}
else {
treeView1.Top = e.NewValue * -;
}
}

WinForm 中 VScrollBar Maximum 问题的更多相关文章

  1. .net开发笔记(十八) winform中的等待框

    winform中很多任务是需要在后台线程(或类似)中完成的,也就是说,经常容易涉及到UI界面与后台工作线程之间的交互.比如UI界面控制后台工作的执行(启动.暂停.停止等),后台工作进度在UI界面上的显 ...

  2. C#在WinForm中重写ProgressBar控件(带%的显示)

    废话少说,直接上码: namespace csPublish { [ToolboxItem(true)] class textProgressBar : System.Windows.Forms.Pr ...

  3. C# WinForm 中Label自动换行 解决方法

    在TableLayoutPannel中放着一些Label如果把Label的AutoSize属性设成True的话,文字超过label长度时就会自动增加,直到后面的字出窗体以外设置成False时,一旦到达 ...

  4. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  5. C# Winform 中如何实现音乐播放和视频播放

    C#  Winform 中如何实现音乐播放和视频播放 namespace WindowsFormsApplication1 { public partial class Form2 : Form { ...

  6. 另一种在WINFORM中使用XNA的方法

    之前在写化学分子模型制作程序的时候,使用一种方法,将WINFORM控件嵌入到XNA窗体中,从而实现了即使用WINFORM窗体控件又使用XNA.最近在写另一个物理运动学课件制作程序,同样使用XNA,但从 ...

  7. winform中dataGridView单元格根据值设置新值,彻底解决绑定后数据类型转换的困难

    // winform中dataGridView单元格在数据绑定后,数据类型更改困难,只能迂回实现.有时候需要将数字变换为不同的文字描述,就会出现int32到string类型转换的异常,借助CellFo ...

  8. winform中ComboBox实现text和value,使显示和值分开,重写text和value属性

    winform的ComboBox中只能赋值text,显示和值是一样的,很多时候不能满足根本需要,熟悉B/S开发的coder最常用的就是text和value分开的,而且web下DropDownList本 ...

  9. winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色

    winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色 先设置奇数行颜色,这个有个自带的属性AlternatingRowsDefaultCellStyle ...

随机推荐

  1. JavaWeb 5 Tomcat

    5 Tomcat 1 Web开发入门            1.1 引入                之前的程序: java桌面程序,控制台控制,socket gui界面.javase规范      ...

  2. eclipse_中的注释_快捷键

    eclipse 中的注释 快捷键   把要注释的代码选中,按Ctrl+Shift+/ /* */ 形式的 ctrl+/ //形式的 取消代码注释: 把要注释的代码选中,按Ctrl+Shift+\ /* ...

  3. linux下tftp安装与设置

    在学习linux+arm开发的时候,tftp和NFS是必不可少的环境.这里总结一下自己安装和使用tftp的一些经验,做个备忘. 一.tftp服务原理 tftp(trivial file transfe ...

  4. CSS三种定位机制

    标准文档流 块级元素撑满整个页面div,ul,li,dl,dt,p 行级元素可以一行显示多个span,strong,img,input大部分 一般不设置盒子的高度,另其自动调整 margin属性的au ...

  5. ASP.NET C#_HTML练习

    1. textarea和<input type=”text”>的区别是什么?  前者是多行输入框,后者是单行输入框 2. 如何让下拉框菜单支持多选? <select multiple ...

  6. ios 开发 收起键盘的小技巧

    在UIViewController中收起键盘,除了调用相应控件的resignFirstResponder方法外,还有另外三种方法: 1.重载UIViewController中的touchesBegin ...

  7. javascript图片切换

    JavaScript 图片滑动切换效果 作者:cloudgamer 时间: 2009-09-25 文档类型:原创 来自:蓝色理想 第 1 页 JavaScript 图片滑动切换效果 [1] 第 2 页 ...

  8. python3.x随手笔记1

    语法分析 Python程序读取的 解析器 . 解析器的输入流 令牌 ,生成的 词法分析程序 . 这一章描述了如何 词法分析程序把一个文件分解成令牌. Python读取程序文本作为Unicode代码点; ...

  9. 《javascript高级程序设计》第六章 Object Creation VS Inheritance

    6.1 理解对象 6.1.1 属性类型 6.1.2 定义多个属性 6.1.3 读取属性的特性6.2 创建对象 6.2.1 工厂模式 6.2.2 构造函数模式 6.2.3 原型模式 6.2.4 组合使用 ...

  10. wiki-editor语法

    1.==标题== 2.::换行缩进 3.[[文件:example.png]] 图片 4.** 名字|名字 链接