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

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

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

开始

首先来说数字键盘

添加用户控件,命名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         }

计效果

dde7b2148a0ad2c38a57f30a71a5888e.png

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

添加用户控件,命名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         }

计效果

a4710f3b5461245beda4e952c333586e.png

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

用处及效果

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos下cmake安装

步骤一、安装gcc等必备程序包&#xff08;已安装则略过此步&#xff0c;用gcc -v检测&#xff09; yum install -y gcc gcc-c make automake 步骤二、安装wget &#xff08;已安装则略过此步&#xff09; yum install -y wget 步骤三、获取CMake源码包 wget http://www.cmake.…

恩智浦智能车大赛2020_内蒙古科技大学第九届智能车大赛校内公开赛总决赛

为了激发学生的创新意识&#xff0c;提高学生的动手能力&#xff0c;培养团队合作意识&#xff0c;秉承“实践源于真知&#xff0c;创新放飞梦想”的思想。2020年12月6日&#xff0c;内蒙古科技大学第九届智能车大赛总决赛如约而至。本次大赛有来自各院系的223支队伍报名参加了…

解读直播连麦与点播加密

近年来&#xff0c;直播热潮持续升温。有需求就会有变革&#xff0c;直播的相关技术也在不断更新&#xff0c;为直播行业带来更好地服务。如&#xff1a;直播连麦与点播加密技术等。 直播连麦&#xff0c;即主播与连麦者通过互动直播中心进行实时互动&#xff0c;信息在云端混流…

血红蛋白判断access程序答案_普渡大学开发智能手机应用程序 帮助评估贫血症情况...

医生诊断贫血疾病的方法之一&#xff0c;就是通过观察患者的眼皮&#xff0c;判断眼皮是否发红&#xff0c;从而判断红细胞的数量。但对医生来说&#xff0c;面临的挑战是&#xff0c;这种简单的测试不够精确&#xff0c;无法不从患者身上抽取血样就能给出诊断。美国普渡大学的…

学习笔记:AC自动机

话说AC自动机有什么用......我想要自动AC机 AC自动机简介&#xff1a; 首先简要介绍一下AC自动机&#xff1a;Aho-Corasick automation&#xff0c;该算法在1975年产生于贝尔实验室&#xff0c;是著名的多模匹配算法之一。一个常见的例子就是给出n个单词&#xff0c;再给出一段…

thinkphp一句话疑难解决笔记

URL_PATHINFO_DEPR, depr表示 网页路径"分隔符",用"-", 有利于seo,注意是从 sername/index.php(开始的)/home-user-login-var-value开始的,pathinfo也支持普通的参数传值(仅仅支持参数...). 在thinkphp中,有两个地方使用depr,另一个就是tpl的文件目录组织分…

SQL中的多表查询,以及JOIN的顺序重要么?

说法是&#xff0c;一般来说&#xff0c;JOIN的顺序不重要&#xff0c;除非你要自己定制driving table。 示例&#xff1a; SELECT a.account_id, c.fed_id, e.fname, e.lname-> FROM account AS a INNER JOIN customer AS c-> ON a.cust_id c.cust_id-> INNER JOIN …

字节跳动 设计模式 pdf_凭这份pdf我拿下了美团、字节跳动、阿里、小米等大厂的offer...

关于程序员&#xff0c;除了做项目来提高自身的技术之外&#xff0c;还有一种提升自己的专业技能就是&#xff1a;多&#xff01;看&#xff01;书&#xff01;小编整理出一篇Java进阶架构师之路的核心知识&#xff0c;同时也是面试时面试官必问的知识点&#xff0c;篇章也是包…

android 音频播放总结 soundlPool,MediaPlay

soundlPool 用于小音频的播放多个同时播放。 使用步骤&#xff1a; 步骤一&#xff1a; 首先下载音频文件可以将其放入assets文件夹下或者res下的raw文件夹下&#xff0c;区别在于assets下可以再新建文件夹而raw不行&#xff0c;assets内部单个文件超过1m时可能存在bug而raw不会…

文本分析软件_十大针对机器学习的文本注释工具与服务,你选哪个?

房地产和键【51CTO.com快译】目前&#xff0c;从搜索引擎与情感分析&#xff0c;到虚拟助手与聊天机器人&#xff0c;机器学习应用场景中的许多研究领域&#xff0c;都需要通过文本注释工具与服务来提供准确性。在AI研究与开发行业中&#xff0c;发现或创建可注释的数据对于项目…

python 垃圾回收机制

DAY 18. python垃圾回收机制 python GC主要有三种方式 引用计数标记清除分代回收 其中&#xff0c;以引用计数为主。 18.1 引用计数&#xff08;Reference Counting&#xff09; 《寻梦环游记》中说&#xff0c;人一生会经历两次死亡&#xff0c;一次是肉体死的时候&#…

曲线连接线_荷重位移曲线仪操作使用注意事项-荷重位移曲线仪厂家

荷重位移曲线仪广泛适用于各种按键及开关、DOME片、按键、微力弹片、硅胶按键、汽车开关之荷重-行程测定&#xff1b;Windows中英文双语软件&#xff0c;操作简单方便&#xff0c;软件流畅稳定&#xff0c;所有测试资料(测试条件&#xff0c;曲线&#xff0c;数据结果&#xff…

回归分析什么时候取对数_冬蜜什么时候取,冬天取蜂蜜的方法

大家好&#xff0c;我现在分享的是&#xff0c;在冬天是在什么时候取蜜&#xff01;冬天在我们南方&#xff0c;取蜜时间是十一月到十二月的时候&#xff0c;只要温度达到15度以上&#xff0c;蜂蜜封盖了就可以取蜜了&#xff0c;并且在冬天我们只能取一次&#xff0c;最晚取蜜…

Opencv与dlib联合进行人脸关键点检测与识别

前言 依赖库&#xff1a;opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不记录如何配置&#xff0c;重点在实现上。使用libfacedetection实现人脸区域检测&#xff0c;联合dlib标记人脸特征点&#xff0c;最后使用opencv的FaceRecognizer实现人脸识别。 准备工作 1、配置好Op…

Category 的一些事

来源&#xff1a;伯乐在线 - Tsui YuenHong 链接&#xff1a;http://ios.jobbole.com/90422/ 点击 → 申请加入伯乐在线专栏作者 新增实践部分&#xff1a;偏方 Hook 进某些方法来添加功能 Category – 简介 Category&#xff08;类别&#xff09;是 Objective-C 2.0 添加的新特…

商品综合评价排名

店内有很多产品&#xff0c;而且包含但不局限于以下指标&#xff1a;浏览量、访客数、平均停留时长、详情页跳出率、下单转化率、下单支付转化率、支付转化率、下单金额、下单商品件数、下单买家数、支付金额、支付商品件数、加购件数、访客平均价值、收藏人数、客单价、搜索支…

Ajax实现原理详解

Ajax&#xff1a;Asynchronous javascript and xml&#xff0c;实现了客户端与服务器进行数据交流过程。使用技术的好处是&#xff1a;不用页面刷新&#xff0c;并且在等待页面传输数据的同时可以进行其他操作。 这就是异步调用的很好体现。首先得了解什么是异步和同步的概念。…

SpringJDBC解析3-回调函数(update为例)

PreparedStatementCallback作为一个接口&#xff0c;其中只有一个函数doInPrepatedStatement&#xff0c;这个函数是用于调用通用方法execute的时候无法处理的一些个性化处理方法&#xff0c;在update中的函数实现&#xff1a; protected int update(final PreparedStatementCr…

System.InvalidOperationException : 不应有 Response xmlns=''。

xml如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <Response version"2"><datacash_reference>4700203048783633</datacash_reference><information>Failed to identify the card scheme of the supp…

Navicat Premium连接SQL Server

Navicat Premium连接SQL Server 步骤&#xff1a; 激活SQL Server 服务配置SQL Server网络配置连接SQL Server 激活SQLServer服务 直接搜索 计算机管理 点 服务和应用程序&#xff0c; 点 SQL Server配置管理器&#xff0c; 双击第一个SQL Server服务 不出意外的话&#xf…