前提

入行已经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中,英文键盘,数字键盘,支付键盘,手写键盘

键盘一般用在到文本框弹出的键盘,那么为什么到现在还没有看到文本框的影子呢?因为文本框的某些功能牵扯到了自定义窗体,所以准备在自定义窗体介绍之后再来说文本框。

本篇文章介绍数字键盘和支付键盘,手写键盘将在后面文本框控件介绍是提及到,此处不单独介绍

开始

首先来说数字键盘

添加用户控件,命名UCKeyBorderNum

全部功能代码如下,没有太多东西

 1  private bool useCustomEvent = false; 2         ///  3         /// 是否使用自定义的事件来接收按键,当为true时将不再向系统发送按键请求 4         ///  5         [Description("是否使用自定义的事件来接收按键,当为true时将不再向系统发送按键请求"), Category("自定义")] 6         public bool UseCustomEvent 7         { 8             get { return useCustomEvent; } 9             set { useCustomEvent = value; }10         }11         [Description("数字点击事件"), Category("自定义")]12         public event EventHandler NumClick;13         [Description("删除点击事件"), Category("自定义")]14         public event EventHandler BackspaceClick;15         [Description("回车点击事件"), Category("自定义")]16         public event EventHandler EnterClick;17         public UCKeyBorderNum()18         {19             InitializeComponent();20         }21 22         private void Num_MouseDown(object sender, MouseEventArgs e)23         {24             if (NumClick != null)25             {26                 NumClick(sender, e);27             }28             if (useCustomEvent)29                 return;30             Label lbl = sender as Label;31             SendKeys.Send(lbl.Tag.ToString());32         }33 34         private void Backspace_MouseDown(object sender, MouseEventArgs e)35         {36             if (BackspaceClick != null)37             {38                 BackspaceClick(sender, e);39             }40             if (useCustomEvent)41                 return;42             Label lbl = sender as Label;43             SendKeys.Send("{BACKSPACE}");44         }45 46         private void Enter_MouseDown(object sender, MouseEventArgs e)47         {48             if (EnterClick != null)49             {50                 EnterClick(sender, e);51             }52             if (useCustomEvent)53                 return;54             SendKeys.Send("{ENTER}");55         }

计效果

下面说支付键盘,这个可能就比较小众的键盘了,支持根据输入金额自动计算可能付款金额

添加用户控件,命名UCKeyBorderPay

同样的东西不多,主要的就一个计算预估付款金额

  1  [Description("数字点击事件"), Category("自定义")]  2         public event EventHandler NumClick;  3   4         [Description("取消点击事件"), Category("自定义")]  5         public event EventHandler CancelClick;  6   7         [Description("确定点击事件"), Category("自定义")]  8         public event EventHandler OKClick;  9  10         [Description("删除点击事件"), Category("自定义")] 11         public event EventHandler BackspaceClick; 12  13         [Description("金额点击事件"), Category("自定义")] 14         public event EventHandler MoneyClick; 15         public UCKeyBorderPay() 16         { 17             InitializeComponent(); 18         } 19  20         #region 设置快速付款金额 21         ///  22         /// 功能描述:设置快速付款金额 23         /// 作  者:HZH 24         /// 创建日期:2019-03-07 11:41:04 25         /// 任务编号:POS 26         ///  27         /// SorceMoney 28         public void SetPayMoney(decimal SorceMoney) 29         { 30             List list = new List(); 31             decimal d = Math.Ceiling(SorceMoney); 32             if (SorceMoney > 0m) 33             { 34                 if (SorceMoney < 5m) 35                 { 36                     list.Add(5m); 37                     list.Add(10m); 38                     list.Add(20m); 39                     list.Add(50m); 40                 } 41                 else if (SorceMoney < 10m) 42                 { 43                     list.Add(10m); 44                     list.Add(20m); 45                     list.Add(50m); 46                     list.Add(100m); 47                 } 48                 else 49                 { 50                     int num = Convert.ToInt32(d % 10m); 51                     int num2 = Convert.ToInt32(Math.Floor(d / 10m) % 10m); 52                     int num3 = Convert.ToInt32(Math.Floor(d / 100m)); 53                     int num4; 54                     if (num < 5) 55                     { 56                         num4 = num2 * 10 + 5; 57                         list.Add(num4 + num3 * 100); 58                         num4 = (num2 + 1) * 10; 59                         list.Add(num4 + num3 * 100); 60                     } 61                     else 62                     { 63                         num4 = (num2 + 1) * 10; 64                         list.Add(num4 + num3 * 100); 65                     } 66                     if (num4 >= 0 && num4 < 10) 67                     { 68                         num4 = 10; 69                         if (list.Count < 4) 70                         { 71                             list.Add(num4 + num3 * 100); 72                         } 73                         num4 = 20; 74                         if (list.Count < 4) 75                         { 76                             list.Add(num4 + num3 * 100); 77                         } 78                         num4 = 50; 79                         if (list.Count < 4) 80                         { 81                             list.Add(num4 + num3 * 100); 82                         } 83                         num4 = 100; 84                         if (list.Count < 4) 85                         { 86                             list.Add(num4 + num3 * 100); 87                         } 88                     } 89                     else if (num4 >= 10 && num4 < 20) 90                     { 91                         num4 = 20; 92                         if (list.Count < 4) 93                         { 94                             list.Add(num4 + num3 * 100); 95                         } 96                         num4 = 50; 97                         if (list.Count < 4) 98                         { 99                             list.Add(num4 + num3 * 100);100                         }101                         num4 = 100;102                         if (list.Count < 4)103                         {104                             list.Add(num4 + num3 * 100);105                         }106                     }107                     else if (num4 >= 20 && num4 < 50)108                     {109                         num4 = 50;110                         if (list.Count < 4)111                         {112                             list.Add(num4 + num3 * 100);113                         }114                         num4 = 100;115                         if (list.Count < 4)116                         {117                             list.Add(num4 + num3 * 100);118                         }119                     }120                     else if (num4 < 100)121                     {122                         num4 = 100;123                         if (list.Count < 4)124                         {125                             list.Add(num4 + num3 * 100);126                         }127                     }128                 }129             }130             SetFastMoneyToContrl(list);131         }132         #endregion133 134         private void SetFastMoneyToContrl(List values)135         {136             List lbl = new List() { lblFast1, lblFast2, lblFast3, lblFast4 };137             lblFast1.Tag = lblFast1.Text = "";138             lblFast2.Tag = lblFast2.Text = "";139             lblFast3.Tag = lblFast3.Text = "";140             lblFast4.Tag = lblFast4.Text = "";141             for (int i = 0; i < lbl.Count && i < values.Count; i++)142             {143                 if (values[i].ToString("0.##").Length < 4)144                 {145                     lbl[i].Font = new System.Drawing.Font("Arial Unicode MS", 30F);146                 }147                 else148                 {149                     Graphics graphics = lbl[i].CreateGraphics();150                     for (int j = 0; j < 5; j++)151                     {152                         SizeF sizeF = graphics.MeasureString(values[i].ToString("0.##"), new System.Drawing.Font("Arial Unicode MS", 30 - j * 5), 100, StringFormat.GenericTypographic);153                         if (sizeF.Width <= lbl[i].Width - 20)154                         {155                             lbl[i].Font = new System.Drawing.Font("Arial Unicode MS", 30 - j * 5);156                             break;157                         }158                     }159                     graphics.Dispose();160                 }161                 lbl[i].Tag = lbl[i].Text = values[i].ToString("0.##");162             }163         }164         private void Num_MouseDown(object sender, MouseEventArgs e)165         {166             if (NumClick != null)167                 NumClick((sender as Label).Tag, e);168         }169 170         private void Backspace_MouseDown(object sender, MouseEventArgs e)171         {172             if (BackspaceClick != null)173                 BackspaceClick((sender as Label).Tag, e);174         }175 176         private void Cancel_MouseDown(object sender, MouseEventArgs e)177         {178             if (CancelClick != null)179                 CancelClick((sender as Label).Tag, e);180         }181 182         private void OK_MouseDown(object sender, MouseEventArgs e)183         {184             if (OKClick != null)185                 OKClick((sender as Label).Tag, e);186         }187 188         private void Money_MouseDown(object sender, MouseEventArgs e)189         {190             if (MoneyClick != null)191                 MoneyClick((sender as Label).Tag, e);192         }193 194         public void Money1Click()195         {196             Money_MouseDown(lblFast1, null);197         }198 199         public void Money2Click()200         {201             Money_MouseDown(lblFast2, null);202         }203 204         public void Money3Click()205         {206             Money_MouseDown(lblFast3, null);207         }208 209         public void Money4Click()210         {211             Money_MouseDown(lblFast4, null);212         }

计效果

那4个空白的位置就是用来填充预估付款金额的

用处及效果

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

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

vb.net 窗体接收键盘事件_(十五)C#WinFrom自定义控件系列-键盘(二)相关推荐

  1. python读取键盘事件_使用 Python 记录键盘事件!真的很神奇~

    今天也不知道是想了什么,突然就想要试试看我有效击键时的手速到底有多快.为此,需要记录下来击键的记录.于是找到了 Python 的keyboard 库. 安装非常简单,只需执行pip install k ...

  2. 正确绑定键盘事件_事件为何重要以及如何正确处理

    正确绑定键盘事件 玛丽娜·佩奇 ( Marina Paych )在她的生日那天离开了一个非政府组织,开始了IT行业的新起点时,她是开源软件的新来者. 但是真正的惊喜竟然是开源. 快进两年了,这个组织发 ...

  3. autocomplete触发事件_修改jQuery.autocomplete中遇到的键盘事件

    修改jQuery.autocomplete中遇到的键盘事件 autocomplete是一个jquery的自动完成插件,http://www.pengoworks.com/workshop/jquery ...

  4. WinForm下的键盘事件(KeyPress、KeyDown)及如何处理不响应键盘事件

    KeyDown事件用来处理功能键:F1 F2 F3...  keyPress事件用来处理字符比如说:A B C... 1 2 3...  注:处理该事件时,需要先将窗体的 KeyPreview=tru ...

  5. vue+ElementUI el-table表格单元格编辑增加键盘事件功能(向上、向下、回车键盘事件)

    1.此功能已集成到TTable组件中 2.最终效果 3.关键代码 // 键盘事件handleKeyup(event, index, key) {if (!this.isKeyup) returnthi ...

  6. iphone 键盘兼容_如何在iPhone上使用单手键盘

    iphone 键盘兼容 With iOS 11, Apple added a one-handed keyboard option to the iPhone. This should make it ...

  7. 六十五、Leetcode数组系列(上篇)

    @Author:Runsen @Date:2020/6/5 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  8. vb.net 窗体接收键盘事件_不用100就能够买到全键盘的无线键鼠套装,双飞燕FG1010魅力依旧...

    说起双飞燕,对我来说是初中时代的满满记忆,我记得那年是我正式学习电脑后家里给我配置的第一台电脑,而那时候配的就是有线的双飞燕键盘鼠标,我记得那时候双飞燕是我见过最多人用的键盘鼠标,而我那套双飞燕用了很 ...

  9. 使用c++ 实现定时触发键盘事件_基于定时器捕获测量脉宽的应用示例

    我们知道,利用单片机定时器捕获功能测量脉冲信号宽度及占空比是种很常见的做法.这里以STM32的定时器为例来介绍基于其捕获功能实现对脉宽的测量的思路及过程. 一般来讲,使用STM32定时器的捕获功能来实 ...

最新文章

  1. 肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法
  2. 《Framework Design Guidelines 2nd Edition》推荐
  3. C++ 模板(template) 的定义
  4. [DP/单调队列]BZOJ 2059 [Usaco2010 Nov]Buying Feed 购买饲料
  5. 理解SVN中trunk,branches,tags
  6. inkscape使用_使用Inkscape和咖啡渣DIY怪异的瓶子标签
  7. 科沃斯扫地机器人阿尔法_科沃斯(Ecovacs)阿尔法地宝简单开箱
  8. s7epaapidll丢失怎么办_s7epaapidll下载
  9. 前端学习(一):HTML基本语法
  10. C++读取图片二进制数据并保存
  11. 客户服务与工单管理系统功能大全
  12. 2021/10/04 git 详细流程
  13. GM(1,1)灰色预测模型
  14. 人生的镜像-菌群人生,从出生到死亡的菌群演替
  15. 重庆云阳2021云中高考成绩查询,2021年云阳县高考状元成绩分数,云阳县历年高考状元名单...
  16. Linux信号处理简析
  17. 对统驭科目和特别总账标志的理解
  18. 我就喜欢那种认认真真和我吵架的
  19. Advancedinstaller安装包自定义操作打开文件
  20. 6个的IT技术开发网站

热门文章

  1. 【Quartz】插件的使用
  2. js 实现用window.print()打印页面中的部分内容,局部打印
  3. mariadb数据库增删改查
  4. 常见cmd命令,开发人员必备
  5. Jzoj4348 打击目标
  6. HDU 1711 Number Sequence(KMP模板)
  7. 在Windows下不使用密码远程登陆Linux
  8. 【代码笔记】iOS-翻书效果的实现
  9. 数据库事务的隔离机制
  10. 领域驱动设计和实践(转:http://kb.cnblogs.com/page/112298/)