博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinForm 中 VScrollBar Maximum 问题
阅读量:5140 次
发布时间:2019-06-13

本文共 1432 字,大约阅读时间需要 4 分钟。

       最近在做一个鼠标经过弹出 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 <= 10)            {                treeView1.Top = vScrollBar1.Maximum * -1;            }            else {                treeView1.Top = e.NewValue * -1;            }        }

 

转载于:https://www.cnblogs.com/a_bu/p/4054895.html

你可能感兴趣的文章
CCS调试教程
查看>>
ansible基本模块-cron
查看>>
Git服务器、http协议及XCode
查看>>
C语言(C99标准)在结构体的初始化上与C++的区别
查看>>
重拾MVC——第一天:数据库连接与SqlDbHelper
查看>>
jmeter学习(一)认识
查看>>
swipe js bug
查看>>
mysql绑定参数bind_param原理以及防SQL注入
查看>>
#Leetcode# 237. Delete Node in a Linked List
查看>>
交叉编译zookeeper的C库
查看>>
电视盒子和网线选择
查看>>
发现一sonar-runner bug
查看>>
SpringBoot整合SpringData和Mysql数据库
查看>>
C++ 构造函数后加冒号
查看>>
centos7下安装mysql8.0
查看>>
npm源设置
查看>>
eclipse中定位引用的源码
查看>>
windows之电脑开机出现 this product is covered by one or more of the following prtents
查看>>
数据库冗余是否必要
查看>>
split()分割字符串用法
查看>>