發布時間:2020-11-30 15:48 作者:獨孤劍 閱讀:1163
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 } }
微信打賞, 微信掃一掃
支付寶打賞, 支付寶掃一掃
如果文章對您有幫助,歡迎給作者打賞