Winform TextBox (文本框) 控件只能输入数值, 限制输入两位小数
using System; using System.Windows.Forms; namespace DemoWinForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } } /// <summary> /// 文本框 - 只能输入数值, 限制输入两位小数 /// 禁止粘贴 /// </summary> public class TextBoxExFloat : TextBox { /// <summary> /// 构造函数 /// </summary> public TextBoxExFloat() { } #region 禁止粘贴 /// <summary> /// 重写基类的WndProc方法 /// </summary> /// <param name="m"></param> protected override void WndProc(ref Message m) { if (m.Msg == 0x0302) // 0x0302是粘贴消息 { m.Result = IntPtr.Zero; // 拦截此消息 return; } base.WndProc(ref m); // 若此消息不是粘贴消息,则交给其基类去处理 } #endregion #region 重写方法 /// <summary> /// 重写方法 /// 可以输入小数 /// </summary> /// <param name="e"></param> protected override void OnKeyPress(KeyPressEventArgs e) { base.OnKeyPress(e); if (e.KeyChar != 8)// 允许输入退格键 { // 最多8位数金额 if (this.Text.Length == 8) { e.Handled = true; } // 允许输入数字、小数点 if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != (char)('.')) { e.Handled = true; } // 小数点只能输入一次 if (e.KeyChar == (char)('.') && this.Text.IndexOf('.') != -1) { e.Handled = true; } // 第一位不能为小数点 if (e.KeyChar == (char)('.') && this.Text == "") { e.Handled = true; } // 第一位是0,第二位必须为小数点 if (e.KeyChar != (char)('.') && this.Text == "0") { e.Handled = true; } // 有小数只保留2位 if (this.Text.IndexOf('.') != -1) { if (this.Text.Length - this.Text.IndexOf('.') - 1 == 2) { e.Handled = true; } } } } #endregion } }