找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1926|回复: 12

Winform TextBox (文本框) 控件只能输入数值, 限制输入两位小数

 火.. [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2021-9-12 15:42:17 | 显示全部楼层 |阅读模式
Winform TextBox (文本框) 控件只能输入数值, 限制输入两位小数
  1. using System;
  2. using System.Windows.Forms;

  3. namespace DemoWinForm
  4. {
  5.     public partial class Form1 : Form
  6.     {
  7.         public Form1()
  8.         {
  9.             InitializeComponent();
  10.         }
  11.     }

  12.     /// <summary>
  13.     /// 文本框 - 只能输入数值, 限制输入两位小数
  14.     /// 禁止粘贴
  15.     /// </summary>
  16.     public class TextBoxExFloat : TextBox
  17.     {
  18.         /// <summary>
  19.         /// 构造函数
  20.         /// </summary>
  21.         public TextBoxExFloat()
  22.         {
  23.         }

  24.         #region 禁止粘贴
  25.         /// <summary>
  26.         /// 重写基类的WndProc方法
  27.         /// </summary>
  28.         /// <param name="m"></param>
  29.         protected override void WndProc(ref Message m)
  30.         {
  31.             if (m.Msg == 0x0302)            // 0x0302是粘贴消息
  32.             {
  33.                 m.Result = IntPtr.Zero;     // 拦截此消息
  34.                 return;
  35.             }
  36.             base.WndProc(ref m);            // 若此消息不是粘贴消息,则交给其基类去处理
  37.         }
  38.         #endregion

  39.         #region 重写方法
  40.         /// <summary>
  41.         /// 重写方法
  42.         /// 可以输入小数
  43.         /// </summary>
  44.         /// <param name="e"></param>
  45.         protected override void OnKeyPress(KeyPressEventArgs e)
  46.         {
  47.             base.OnKeyPress(e);
  48.             if (e.KeyChar != 8)// 允许输入退格键
  49.             {
  50.                 // 最多8位数金额
  51.                 if (this.Text.Length == 8) { e.Handled = true; }

  52.                 // 允许输入数字、小数点  
  53.                 if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != (char)('.'))
  54.                 {
  55.                     e.Handled = true;
  56.                 }

  57.                 // 小数点只能输入一次  
  58.                 if (e.KeyChar == (char)('.') && this.Text.IndexOf('.') != -1)
  59.                 {
  60.                     e.Handled = true;
  61.                 }

  62.                 // 第一位不能为小数点  
  63.                 if (e.KeyChar == (char)('.') && this.Text == "")
  64.                 {
  65.                     e.Handled = true;
  66.                 }

  67.                 // 第一位是0,第二位必须为小数点  
  68.                 if (e.KeyChar != (char)('.') && this.Text == "0")
  69.                 {
  70.                     e.Handled = true;
  71.                 }

  72.                 // 有小数只保留2位
  73.                 if (this.Text.IndexOf('.') != -1)
  74.                 {
  75.                     if (this.Text.Length - this.Text.IndexOf('.') - 1 == 2)
  76.                     {
  77.                         e.Handled = true;
  78.                     }
  79.                 }
  80.             }
  81.         }
  82.         #endregion

  83.     }
  84. }
复制代码

拖拽“TextBoxExFloat”的自定义控件到窗体



工控课堂 www.gkket.com

0

主题

115

回帖

252

积分

注册会员

积分
252
发表于 2021-9-12 15:42:17 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

0

主题

128

回帖

403

积分

注册会员

积分
403
发表于 2021-9-12 15:56:48 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

0

主题

136

回帖

306

积分

注册会员

积分
306
发表于 2025-11-17 03:06:49 | 显示全部楼层
这波反向操作,我属实没想到!
工控课堂 www.gkket.com

0

主题

99

回帖

161

积分

新手上路

积分
161
发表于 2025-11-17 03:12:28 | 显示全部楼层
来凑个热闹,增加点人气~
工控课堂 www.gkket.com

0

主题

92

回帖

151

积分

新手上路

积分
151
发表于 2025-11-17 03:21:05 | 显示全部楼层
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com

0

主题

63

回帖

85

积分

新手上路

积分
85
发表于 2025-11-17 03:23:55 | 显示全部楼层
这评论区卧虎藏龙,个个都是人才!
工控课堂 www.gkket.com

0

主题

102

回帖

157

积分

新手上路

积分
157
发表于 2025-11-17 03:24:44 | 显示全部楼层
救命!这回复笑到我捶桌,必须置顶~
工控课堂 www.gkket.com

0

主题

67

回帖

116

积分

新手上路

积分
116
发表于 2025-11-17 03:25:15 | 显示全部楼层
画面感太强了,仿佛身临其境!
工控课堂 www.gkket.com

0

主题

122

回帖

316

积分

注册会员

积分
316
发表于 2025-11-17 03:26:06 | 显示全部楼层
救命!这波发言太秀了,直接原地封神~
疯狂认同!楼主说出了我不敢说的话
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 13:06 , Processed in 0.674048 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表