vb.net 窗体接收键盘事件_(十四)C#WinFrom自定义控件系列-键盘(一)

前提

入行已经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         }

这样一个键盘就完成了

计效果

2b10675520c1e2efa0f0502776d25bc9.png

用处及效果

6d572f25ce27896f33dabf1b7a43a237.png

使用方法将在后面的文本框处详细介绍

最后的话

如果你喜欢的话,请到 码云或Github 点个星星吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值