首页 > 代码库 > 制作可自定义风格的winform组件类(二)知识要点总结

制作可自定义风格的winform组件类(二)知识要点总结

本文不断补充中,这全都是浪费了我很多时间才走过的坎

 

一、继承关系。

    所有自定义的控件都继承自UserControl,当然你也可以直接从标准的winform控件中派生新类,但这样生出来的控件不能在设计时使用,所以还是得规规矩矩的按.NET给定的路线走。UserControl继承于标准控件的基类Control,使得用户自定义的控件与标准控件在运行时没有任何差别,但在设计时却有很大的不同,有些属性被override后不起作用,似乎是IDE认准了原来属性的get和set方法,对策就是隐藏这个属性,然后用新命名一个属性带替。

    为了让代这组控件的行为更加易于管理,应合理安排类型之间的继承关系。设计一个基类,负责所有事件响应与功能调度,在派生类中通过重写基类对应的方法来完成UI的实现,这样一来逻辑的层级就会很清晰明快,当然作者我一定是这样认为的,但我的新手朋友却在质疑为什么要弄多的继承与重写。

 

二、透明色。

    制作不规则窗体的重点是使窗口的BackColor与TransparencyKey相同,这样背景就镂空了,窗口的背景图就是窗口的有效范围。但等等,因为winform在所有控件和背景重绘后才进行窗口透明处理,这导致了窗口中不论是背景还是控件,只要和背景色相同就会被镂空,所以重点就要选择并牺牲一个不常用颜色给背景,我选择的是LightGreen。有人问我镂空了会怎样?鼠标一点就点windows桌面上的东西了呗。

    window中可识别的静态位图格式中只有png支持透明色,但其它格式可以手工的滤掉一种颜色使之变透明。强烈建议把窗口的TransparencyKey作为位图的底色,这样过滤掉这个颜色后的位图就不可能再会因一点点失误让用户直接点到桌面了,只可惜那些素材都是白色底色的,无奈。

 

三、用到的特性

    DescriptionAttribute、CategoryAttribute和DisplayNameAttribute这三位大爷都是PropertyGrid常用的,这里不作说明

    DefaultEventAttribute作用于类型,定义控件的默认事件,也就是在设计是你双击这个控件触发的事件

    ToolboxItemAttribute作用于类型,定义控件是否在工具箱中出现

    BrowsableAttribute作用于属性,定义属性是否在设计时出现在属性框中,使用它来隐藏在设计时不想被修改的属性

    DefaultValueAttribute作用于属性,定义属性的默认值,此特性并不会初始化属性的值,它的作用:如果属性等于此默认值时,在属性框中显示为非粗体。通俗说就是个人性化没实际用

    TypeConverterAttribute作用于属性,当属性值不是system常用的值类型时,定义设计器赋值时使用的类型转换器

    EditorAttribute作用于属性,属性框中属性值的高级编辑的接口,像属性框中可弹出的颜色选择框,文件选择框,图像源等等都是这个特性在起作用

 

四、事件响应

    通常对于控件自身的事件应该使用正常的事件响应,但我还是去重写了控件的那些on...开头的方法,这样做的好处可以让你的代码运行在事件触发以前,通过查看.NET的源代码,控件中的整合也全是在base.on...方法中触发的

 

制作可自定义风格的winform组件类(二)知识要点总结