.NET组件控件实例编程系列——4.多列下拉框和鼠标相关组件(二)2011-10-15 博客园 Alex Leo可改变大小组件ResizableComponent实现原理1、这里将控件分成9个区域,上左、上中、上右、中左、中央、中右、下左、下中、下右。中央区域 被其他8个区域包围形成一个虚拟的边框。边框的宽度可以自定义,中央区域不响应操作,其他8个区域可 以选择性响应操作。2、鼠标移动过程中检测鼠标坐标。如果处在边缘处,则根据不同的位置设置不同的改变大小的鼠标样 式。3、在鼠标按下事件中记录下当前鼠标坐标4、鼠标移动过程中,如果鼠标左键按下,则根据当前位置和之前记录的位置计算位移5、根据鼠标位移和鼠标所处的区域,调整控件的大小和位置6、鼠标移开时恢复默认鼠标样式实现要点1、内部控件可能覆盖边缘,内部控件也需要处理鼠标事件。和可移动组件一样通过扩展属性指示内部 控件是否允许响应操作。2、可响应改变大小的位置可以自定义,实现自定义UITypeEditor,可视化设置。3、向上或向右改变大小需要同时改变控件的位置,非对角线方向改变大小时要忽略与当前移动方向垂 直的位移。下面介绍详细的实现过程。枚举:DirectionEnum:方向枚举,All-所有方向,Horizontal-水平方向,Vertical-垂直方向。该枚举在移 动操作和改变大小操作中都可以用到。ResizeHandleAreaEnum:改变大小可处理区域枚举,把需要处理改变大小的控件分成3*3的区域,除了 Center区域,其他区域都允许响应鼠标操作。该枚举变量用自定义UITypeEditor进行编辑,后面再详细介 绍。

MovableComponent组件的类图和类详细信息