我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#如何实现Winform小数字键盘模拟器

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#如何实现Winform小数字键盘模拟器

这篇文章主要介绍C#如何实现Winform小数字键盘模拟器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

文章开始之前,先看一下效果图,看是不是您正所需要的:

C#如何实现Winform小数字键盘模拟器

一、构建计算器的界面

要构建出一个好看点的计算器界面,还是需要颇费些小心思的,我做这个的时候,也花了两三个小时的时间构建这个界面。

其主要的使用控制是TableLayoutPanel控件。

另外一个小难点则在于内容控件Textbox的显示,要让文字垂直居中,在没有重写Textbox控件的情况下要达到这个效果,也是花了些小心思。

其它的界面则没有什么的。至于加减号嘛,则用输入法的特殊符号即可。

二、构建控件的开放属性

一共开放了3个属性,不够自己加。这3个如下,看注释应该能懂:

/// <summary>/// 可接受的最小值,最小为-3.402823E+38/// </summary>[Browsable(true)][Category("Zhongzhou")][DefaultValue(0)][Description("可接受的最小值,最小为-3.402823E+38")]public float Min { get; set; } = 0; /// <summary>/// 可接受的最大值,最大为3.402823E+38/// </summary>[Browsable(true)][Category("Zhongzhou")][DefaultValue(0)][Description("可接受的最大值,最大为3.402823E+38")]public float Max { get; set; } = 0; /// <summary>/// 设置小数点的精度位数,默认为2位小数点/// </summary>[Browsable(true)][Category("Zhongzhou")][DefaultValue(2)][Description("设置小数点的精度位数,默认为2位小数点")]public int Precision { get; set; } = 2;

三、控件键盘输入

我们的目的是让小键盘来输入数字,所以需要禁止实体键盘输入文字字母等信息,以及小数字点最多只能出现一次,具体逻辑如下:

/// <summary>/// 当使用实物键盘输入文本内容时触发/// </summary>/// <param name="e"></param>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;    }} /// <summary>/// 处理小数点/// </summary>/// <returns><see langword="true"/>表示处理成功,<see langword="false"/>表示未处理</returns>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时,光标位置始终移到最末尾处。但是有些情况,比如你要让光标在数字中间删除几个数字或者添加几个数字,就不能让光标自动跑到最末尾处了。

/// <summary>/// 设置新值/// </summary>/// <param name="newContent">表示新值</param>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;}

五、实现退格、清除内容的功能

 /// <summary>/// 清除内容/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void ClearButton_Click(object sender, EventArgs e){    this.SetContent(string.Empty);    this.SetContentFocus();} /// <summary>/// 退格内容/// </summary>/// <param name="sender"></param>/// <param name="e"></param>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确认得到结果的功能

原理是通过事件来实现的。代码如下:

/// <summary>/// 当按下回车按钮时的事件委托/// </summary>/// <param name="sender"></param>/// <param name="e"></param>public delegate void EnteredEventHandler(object sender, float e); /// <summary>/// 当按下回车按钮时的事件/// </summary>public event EnteredEventHandler Entered; /// <summary>/// 当迷你小键盘按下回车时触发事件/// </summary>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);} /// <inheritdoc cref="OnEntered"/>private void EnterButton_Click(object sender, EventArgs e){    this.OnEntered();    this.SetContentFocus();}

以上是“C#如何实现Winform小数字键盘模拟器”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#如何实现Winform小数字键盘模拟器

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#如何实现Winform小数字键盘模拟器

这篇文章主要介绍C#如何实现Winform小数字键盘模拟器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!文章开始之前,先看一下效果图,看是不是您正所需要的:一、构建计算器的界面要构建出一个好看点的计算器界面,还是需要
2023-06-25

C++如何模拟实现键盘打字程序

小编给大家分享一下C++如何模拟实现键盘打字程序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!程序演示:程序代码:#include#inc
2023-06-22

Android如何实现仿微信数字键盘

这篇文章主要介绍了Android如何实现仿微信数字键盘,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、图示效果二、需要考虑的问题布局的实现方式;demo中使用了popupw
2023-06-15

Android如何实现数字九宫格软键盘

这篇文章主要介绍了Android如何实现数字九宫格软键盘,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言一开始大概是这种需求组长说 要不搞一个自定义软键盘吧 数字搞大点 方
2023-06-15

如何基于C#的winform实现数字华容道游戏

这篇文章给大家分享的是有关如何基于C#的winform实现数字华容道游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数字华容道游戏类似于拼图游戏,只需将数字1~15按顺序排好即可。该游戏逻辑比较简单,易于编程实
2023-06-29

C#中Winform如何实现控件自适应父容器大小

小编给大家分享一下C#中Winform如何实现控件自适应父容器大小,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在日常开发中经常遇到控件不能随着父容器大小的改变而且自动改变控件的所在位置和大小。以下是实现的代码 /// <
2023-06-14

Ajax如何实现模拟关键字智能匹配搜索效果

小编给大家分享一下Ajax如何实现模拟关键字智能匹配搜索效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!准备数据keyword.json:(这里只贴出部分数据)
2023-06-08

C++如何实现简单猜数字小游戏

本文小编为大家详细介绍“C++如何实现简单猜数字小游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现简单猜数字小游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、随机数本文采用time(0)作
2023-06-26

C语言如何实现简单猜数字小游戏

这篇文章主要介绍C语言如何实现简单猜数字小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!猜数字游戏是令游戏机随机产生一个100以内的正整数用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比
2023-06-21

如何利用C语言实现猜数字小游戏

这篇文章主要讲解了“如何利用C语言实现猜数字小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用C语言实现猜数字小游戏”吧!实现猜数字的游戏:要用程序完成以下几步:1、电脑自动生成随
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录