前提
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
本系列文章将讲解各种控件的开发及思路,欢迎各位批评指正。
此系列控件开发教程将全部在原生控件基础上进行重绘开发,目标的扁平化、漂亮、支持触屏。
如果有什么好的建议也可以评论留言来交流。
源码地址:
GitHub:https://github.com/kwwwvagaa/NetWinformControl
码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
如果觉得写的还行,请点个 star 支持一下吧
欢迎前来交流探讨: 企鹅群568015492
目录
http://toutiao.com/item/6824291838963220999/
准备工作
对原始树控件treeview进行扩展以更改样式
先了解一下我们需要哪些功能,控件ain可以更改整好颜色,行高,选中效果,分割线等
开始
添加组件,命名TreeViewEx 继承TreeView
先看下属性
1 private const int WS_VSCROLL = 2097152; 2 3 private const int GWL_STYLE = -16; 4 5 private Dictionary _lstTips = new Dictionary(); 6 7 private Font _tipFont = new Font("Arial Unicode MS", 12f); 8 9 private Image _tipImage = Resources.tips; 10 11 private bool _isShowTip = false; 12 13 private bool _isShowByCustomModel = true; 14 15 private int _nodeHeight = 50; 16 17 private Image _nodeDownPic = Resources.list_add; 18 19 private Image _nodeUpPic = Resources.list_subtract; 20 21 private Color _nodeBackgroundColor = Color.FromArgb(61, 60, 66); 22 23 private Color _nodeForeColor = Color.White; 24 25 private bool _nodeIsShowSplitLine = false; 26 27 private Color _nodeSplitLineColor = Color.FromArgb(54, 53, 58); 28 29 private Color m_nodeSelectedColor = Color.FromArgb(255, 121, 74); 30 31 private Color m_nodeSelectedForeColor = Color.White; 32 33 private bool _parentNodeCanSelect = true; 34 35 private SizeF treeFontSize = SizeF.Empty; 36 37 private bool blnHasVBar = false; 38 39 public Dictionary LstTips 40 { 41 get 42 { 43 return this._lstTips; 44 } 45 set 46 { 47 this._lstTips = value; 48 } 49 } 50 51 [Category("自定义属性"), Description("角标文字字体")] 52 public Font TipFont 53 { 54 get 55 { 56 return this._tipFont; 57 } 58 set 59 { 60 this._tipFont = value; 61 } 62 } 63 64 [Category("自定义属性"), Description("是否显示角标")] 65 public Image TipImage 66 { 67 get 68 { 69 return this._tipImage; 70 } 71 set 72 { 73 this._tipImage = value; 74 } 75 } 76 77 [Category("自定义属性"), Description("是否显示角标")] 78 public bool IsShowTip 79 { 80 get 81 { 82 return this._isShowTip; 83 } 84 set 85 { 86 this._isShowTip = value; 87 } 88 } 89 90 [Category("自定义属性"), Description("使用自定义模式")] 91