C#如何实现Winform小数字键盘模拟器
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍C#如何实现Winform小数字键盘模拟器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!文章开始之前,先看一下效果图,看是不是您正所需要的:一、构建计算器的界面
千家信息网最后更新 2025年02月02日C#如何实现Winform小数字键盘模拟器
这篇文章主要介绍C#如何实现Winform小数字键盘模拟器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
文章开始之前,先看一下效果图,看是不是您正所需要的:
一、构建计算器的界面
要构建出一个好看点的计算器界面,还是需要颇费些小心思的,我做这个的时候,也花了两三个小时的时间构建这个界面。
其主要的使用控制是TableLayoutPanel控件。
另外一个小难点则在于内容控件Textbox的显示,要让文字垂直居中,在没有重写Textbox控件的情况下要达到这个效果,也是花了些小心思。
其它的界面则没有什么的。至于加减号嘛,则用输入法的特殊符号即可。
二、构建控件的开放属性
一共开放了3个属性,不够自己加。这3个如下,看注释应该能懂:
////// 可接受的最小值,最小为-3.402823E+38/// [Browsable(true)][Category("Zhongzhou")][DefaultValue(0)][Description("可接受的最小值,最小为-3.402823E+38")]public float Min { get; set; } = 0; ////// 可接受的最大值,最大为3.402823E+38/// [Browsable(true)][Category("Zhongzhou")][DefaultValue(0)][Description("可接受的最大值,最大为3.402823E+38")]public float Max { get; set; } = 0; ////// 设置小数点的精度位数,默认为2位小数点/// [Browsable(true)][Category("Zhongzhou")][DefaultValue(2)][Description("设置小数点的精度位数,默认为2位小数点")]public int Precision { get; set; } = 2;
三、控件键盘输入
我们的目的是让小键盘来输入数字,所以需要禁止实体键盘输入文字字母等信息,以及小数字点最多只能出现一次,具体逻辑如下:
////// 当使用实物键盘输入文本内容时触发/// /// private void OnKeyPressed(KeyPressEventArgs e){ //13表示回车 if (e.KeyChar == 13) { this.OnEntered(); e.Handled = true; return; } //48代表0,57代表9,8代表空格,46代表小数点 if ((e.KeyChar < 48 || e.KeyChar >= 57) && (e.KeyChar != 8) && (e.KeyChar != 46)) { e.Handled = true; return; } //判断多次输入小数点,仅允许出现1次小数点 if (e.KeyChar == 46) { this.PointHandle(); this.SetContentFocus(); e.Handled = true; return; }} ////// 处理小数点/// ///private bool PointHandle(){ string content = this.ContentTextBox.Text; if (content.IndexOf('.') != -1) { return false; } if (string.IsNullOrEmpty(content)) { this.SetContent("0."); return true; } //取光标位置 int index = this.ContentTextBox.SelectionStart; string str = this.ContentTextBox.Text.Substring(0, index); if (str == "+" || str == "-") { return this.SetContent(string.Join(string.Empty, str, "0.", this.ContentTextBox.Text.Substring(index, this.ContentTextBox.Text.Length - index))); } return this.SetContent(string.Join(string.Empty, str, ".", this.ContentTextBox.Text.Substring(index, this.ContentTextBox.Text.Length - index)));} 表示处理成功, 表示未处理
四、让文本框处理焦点状态以及光标位置的处理
光标位置,需要特殊处理的,默认参数cursorPosition=-1时,光标位置始终移到最末尾处。但是有些情况,比如你要让光标在数字中间删除几个数字或者添加几个数字,就不能让光标自动跑到最末尾处了。
////// 设置新值/// /// 表示新值private bool SetContent(string newContent){ int precision = this.Precision; if (string.IsNullOrEmpty(newContent)) { this.ContentTextBox.Text = string.Empty; return true; } var scheme = newContent.Split('.'); if (scheme.Length == 2) { var realPrecision = scheme[1].Length; if (realPrecision > precision) { return false; } } this.ContentTextBox.Text = newContent; return true;}
五、实现退格、清除内容的功能
////// 清除内容/// /// /// private void ClearButton_Click(object sender, EventArgs e){ this.SetContent(string.Empty); this.SetContentFocus();} ////// 退格内容/// /// /// private void BackButton_Click(object sender, EventArgs e){ //取光标位置 int index = this.ContentTextBox.SelectionStart; //剪切内容 string cutStr = this.ContentTextBox.Text.Substring(0, index); //剩余内容 string remainStr = this.ContentTextBox.Text.Substring(index, this.ContentTextBox.Text.Length - index); int position = this.SetContent(string.Join(string.Empty, cutStr.Substring(0, cutStr.Length - 1), remainStr)) ? index - 1 : index; this.SetContentFocus(position);}
六、实现Enter确认得到结果的功能
原理是通过事件来实现的。代码如下:
////// 当按下回车按钮时的事件委托/// /// /// public delegate void EnteredEventHandler(object sender, float e); ////// 当按下回车按钮时的事件/// public event EnteredEventHandler Entered; ////// 当迷你小键盘按下回车时触发事件/// protected virtual void OnEntered(){ float min = this.Min; float max = this.Max; var value = string.IsNullOrEmpty(this.ContentTextBox.Text) ? 0 : Convert.ToSingle(this.ContentTextBox.Text); if (max != 0 && value > max) { MessageBox.Show("值不在最大范围内", "提示"); return; } if (min != 0 && value < min) { MessageBox.Show("值不在最小范围内", "提示"); return; } this.Entered?.Invoke(this, value);} ///private void EnterButton_Click(object sender, EventArgs e){ this.OnEntered(); this.SetContentFocus();}
以上是"C#如何实现Winform小数字键盘模拟器"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
内容
小数
小数点
数字
光标
处理
输入
键盘
最大
最小
位置
控件
事件
代表
界面
模拟器
C#
些小
特殊
位数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
斗罗大陆模组服务器怎样创造
数据库系统工程师第3版
软件开发就业状况论文
网络技术部的自我介绍
创建数据库用哪个字符集
erp系统怎样安装数据库
絮凝剂安全数据库编号
网络安全技术考试难吗
世界锦标赛项目需求描述数据库
帆软报表服务器怎么设置外网访问
网络安全设备阀丝
视频存储数据库mysql
德国网络安全创新局
怎么开启应用服务器
山西省科协网络安全责任书
南阳三年制计算机网络技术
延安人才储备数据库
3g 服务器
酷我音乐 代理服务器
植物mirna预测数据库
数据库连接的方法和步骤
梧州电商软件开发
电脑如何装谷歌服务器
为什么引入数据库连接池技术
魔兽怀旧服服务器主机怎么进
端口映射服务器
数据库语言DML的三大功能
数据库设计代做价格
用友软件开发岗前景
华为服务器报警1110