前提
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
本系列文章将讲解各种控件的开发及思路,欢迎各位批评指正。
此系列控件开发教程将全部在原生控件基础上进行重绘开发,目标的扁平化、漂亮、支持触屏。
如果有什么好的建议也可以评论留言来交流。
源码地址:
GitHub:https://github.com/kwwwvagaa/NetWinformControl
码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
如果觉得写的还行,请点个 star 支持一下吧
欢迎前来交流探讨: 企鹅群568015492
目录
http://toutiao.com/item/6824291838963220999/
准备工作
键盘控件目前分为4中,英文键盘,数字键盘,支付键盘,手写键盘
键盘一般用在到文本框弹出的键盘,那么为什么到现在还没有看到文本框的影子呢?因为文本框的某些功能牵扯到了自定义窗体,所以准备在自定义窗体介绍之后再来说文本框。
本篇文章介绍英文键盘
开始
添加用户控件,命名UCKeyBorderAll
定义枚举,显示模式
1 public enum KeyBorderCharType2 {3 CHAR = 1,4 NUMBER = 25 }
属性
1 private KeyBorderCharType _charType = KeyBorderCharType.CHAR; 2 3 [Description("默认显示样式"), Category("自定义")] 4 public KeyBorderCharType CharType 5 { 6 get { return _charType; } 7 set 8 { 9 _charType = value;10 if (value == KeyBorderCharType.CHAR)11 {12 if (label37.Text.ToLower() == "abc.")13 {14 CharOrNum();15 }16 }17 else18 {19 if (label37.Text.ToLower() == "?123")20 {21 CharOrNum();22 }23 }24 }25 }26 [Description("按键点击事件"), Category("自定义")]27 public event EventHandler KeyClick;28 [Description("回车点击事件"), Category("自定义")]29 public event EventHandler EnterClick;30 [Description("删除点击事件"), Category("自定义")]31 public event EventHandler BackspaceClike;32 [Description("收起点击事件"), Category("自定义")]33 public event EventHandler RetractClike;
按钮事件
1 private void KeyDown_MouseDown(object sender, MouseEventArgs e) 2 { 3 Label lbl = sender as Label; 4 if (string.IsNullOrEmpty(lbl.Text)) 5 { 6 return; 7 } 8 if (lbl.Text == "大写") 9 {10 ToUper(true);11 lbl.Text = "小写";12 }13 else if (lbl.Text == "小写")14 {15 ToUper(false);16 lbl.Text = "大写";17 }18 else if (lbl.Text == "?123" || lbl.Text == "abc.")19 {20 CharOrNum();21 }22 else if (lbl.Text == "空格")23 {24 SendKeys.Send(" ");25 }26 else if (lbl.Text == "删除")27 {28 SendKeys.Send("{BACKSPACE}");29 if (BackspaceClike != null)30 BackspaceClike(sender, e);31 }32 else if (lbl.Text == "回车")33 {34 SendKeys.Send("{ENTER}");35 if (EnterClick != null)36 EnterClick(sender, e);37 }38 else if (lbl.Text == "收起")39 {40 if (RetractClike != null)41 RetractClike(sender, e);42 }43 else44 {45 SendKeys.Send(lbl.Text);46 }47 if (KeyClick != null)48 KeyClick(sender, e);49 }
辅助函数
1 private void ToUper(bool bln) 2 { 3 foreach (Control item in this.tableLayoutPanel2.Controls) 4 { 5 if (item is Panel) 6 { 7 foreach (Control pc in item.Controls) 8 { 9 if (pc is Label)10 {11 if (pc.Text == "abc.")12 break;13 if (bln)14 {15 pc.Text = pc.Text.ToUpper();16 }17 else18 {19 pc.Text = pc.Text.ToLower();20 }21 break;22 }23 }24 }25 }26 }27 28 private void CharOrNum()29 {30 foreach (Control item in this.tableLayoutPanel2.Controls)31 {32 if (item is Panel)33 {34 foreach (Control pc in item.Controls)35 {36 if (pc is Label)37 {38 string strTag = pc.Text;39 pc.Text = pc.Tag.ToString();40 pc.Tag = strTag;41 break;42 }43 }44 }45 }46 }
这样一个键盘就完成了
计效果
用处及效果
使用方法将在后面的文本框处详细介绍
最后的话
如果你喜欢的话,请到 码云或Github 点个星星吧