具有滚动事件的 ScrollableControl






3.22/5 (21投票s)
2004 年 6 月 18 日
2分钟阅读

90178

1837
一个 ScrollableControl 扩展,用于生成水平和垂直滚动事件。
引言
如果你正在编写自己的控件,很有可能你将使用 .NET 框架类 Control
作为基类。 如果你想要编写一个控件,该控件充当更大虚拟区域的窗口(例如数据网格或绘图控件),那么 ScrollableControl
很好地封装了滚动条的处理。 到目前为止一切都很好 - 除了 ScrollableControl
有一个明显的遗漏。 如果我想跟踪我的控件何时被滚动怎么办?
我在编写自己的数据网格控件时遇到了这个问题。 我实际的网格在 ScrollableControl
派生类中运行良好,我想在一个单独的控件中实现一个列标题,并将它们组合到一个 Panel
控件对象中。 我希望我的列标题控件在我的数据网格控件水平滚动时水平滚动。 问题是,您可以判断 ScrollableControl
派生控件是否已被滚动的唯一方法是轮询其 AutoScrollPosition
值。 不理想! 我需要的是一个 ScrollableControl
,它会发出封装 WM_HSCROLL
和 WM_VSCROLL
Windows 消息的滚动事件。
解决方案 - 一个扩展类
以真正的面向对象的方式,我从 ScrollableControl
类派生了一个新类,该类将生成额外的事件。 该类包含两个新滚动事件的事件存根,并覆盖了 WndProc
方法来拦截发送到控件的 Windows 消息。 我们让基类首先处理消息,以便它在触发事件之前更新控件的滚动位置。 最后,我们将事件转换为 ScrollHandlerEvent
通知,因为 .NET 框架中已经提供了此通知。
注释
ScrollableControlWithScrollEvents
类可以用于任何您使用过 ScrollableControl
类的地方。 如果您希望捕获来自 Panel
的滚动事件,也可以对 Panel
类进行类似的扩展。
玩得开心!