zoukankan      html  css  js  c++  java
  • WinForm 中 VScrollBar Maximum 问题

           最近在做一个鼠标经过弹出 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;
                }
            }
  • 相关阅读:
    封装异常处理之坑
    30multipart/form-data和application/x-www-form-urlencoded的区别(二)urlencoded之自动deocde
    使用MAT时的Shallow Size和 Retained Size的区别
    当动态代理遇到ioc
    线程池的原理
    synchroned原理与对象头(yet)
    mysql压力测试与qps监控
    一种mysql jvm死锁
    Android Jni变量对照表
    结构体中使用函数指针
  • 原文地址:https://www.cnblogs.com/a_bu/p/4054895.html
Copyright © 2011-2022 走看看