以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 分享重绘控件滚动条还有一些问题请教 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=171119) |
-- 作者:douglas738888 -- 发布时间:2021/8/18 16:51:00 -- 分享重绘控件滚动条还有一些问题请教 Foxtable,总体还是好用。在实际项目中很多地方需要显示控件滚动条,比如Panel、TextBox、TreeView等,原来对Winform的控件不是很了解, 总认为修改控件的滚动条应该很容易,下载了VB2019,通过学习网上很多C#重绘滚动条代码,得到一些感悟,要重写控件滚动条真不是一件容易的 事情,就是有些专业的程序员恐怕也要下点功夫。主要是Winform自带的滚动条不太适应一些场景的UCD需要。 看了很多C#例子后,觉得不用.dll文件和.exe文件,重绘滚动条也能在Foxtable中能实现主要功能。以下三个例子雏形基本能达到功能,但目前还差 鼠标滚动未能完成,这方面由于涉及到很多类、继承、引用等等,知识点太多了,还希望老师提供参考代码以及思路指导指导,也请高手们多指导。 以下视图,仅仅在Foxtable中完成的,没有其他第三方文件引用。 1. 重绘Panel垂直滚动条,参考网上C#例子,由两个Panel控件组成 1.1 设一个全局变量“Y”,其他主要在窗口的AfterLoade、Mousemove事件和MouseDown事件写入代码操控. 1.2 最难部分,也是关键部分,是要计算和取得滑槽高度、滑块高度、Y的变动坐标值、VerticalScroll.Value、top、滚动范围等形成自定义算法 1.3 控件自带的滚动条宽度一般是22,上下箭头高度各是20 1.4 Panel控件的自动滚动设False 1.5 相对于TreeView和TextBox,Panel的垂直滚动条坐标取值相对容易一些 1.6 因为没有像C#有既定的函数、继承、派生等,需要计算滑块滚动时与目标Panel控件滚动条滚动的一致性,需要算出相关滚动倍数值 1.7 Panel内尽量不出现会产生横向滚动条的控件场景 问题:鼠标无法滚动自定义的滚动条,如果Panel自动滚动设true,还未能联动自定义的滚动条 2. 重绘TextBox垂直滚动条,参考网上C#例子,由两个Panel控件组成;也参考了论坛中textbox滚动例子 2.1 全局代码使用了textbox滚动例子的代码,设一个全局变量“Y”,其他主要在窗口的AfterLoade、Mousemove事件和MouseDown事件写入代码操控 2.2 TextBox很难取得滚动条的值,目前主要取行数以及应用SelectionStart、ScrollToCaret 配合使用滚动倍数值来实现滚动 2.3 TextBox控件的滚动条设None,如要鼠标滚动,可设Vertical,但作为滑槽的Panel控件位置必需准确覆盖TextBox控件的滚动条(但无法联动自定义的滚动条) 问题:鼠标无法滚动自定义的滚动条,如果TextBox滚动条设Vertical,还未能联动自定义的滚动条 3. 重绘TreeView垂直滚动条,参考网上C#例子,由两个Panel控件组成; 3.1 设一个全局变量“Y”,其他主要在窗口的AfterLoade、Mousemove事件和MouseDown事件写入代码操控 3.2 TreeView相比以上两个控件是最难取值的(用C#来写会更容易取值),目前TreeView主要取节点数,加上1.中的相关算法来实现 3.3 TreeView的滚动条不显示scrollable = False,取值要计算Nodes.count,itemHeight,以及用到1.中的相关算法来实现 3.4 目前可见内容行数的控制,以及滚动递减递增的行数没有找到方法(主要是水平有限) 问题:鼠标无法滚动自定义的滚动条,如果TextView显示滚动条, 还未能联动自定义的滚动条 [此贴子已经被作者于2021/8/18 17:01:53编辑过]
|