c# 只能输入数字的文本框

时间:2022-12-08 23:13:16

作者:兔子党逍遥

转自:http://blog.csdn.net/wuyazhe/article/details/5729338


[c-sharp] view plaincopy
  1. private void textBox1_KeyPress(object sender, KeyPressEventArgs e)          
  2. {  
  3.     e.Handled = !(Char.IsNumber(e.KeyChar) || e.KeyChar == (char)8 || e.KeyChar == '.');  
  4.     if (!e.Handled) (sender as TextBox).Tag = (sender as TextBox).Text;//记录最后一次正确输入  
  5. }  
  6.   
  7. private void textBox1_TextChanged(object sender, EventArgs e)  
  8. {  
  9.     if (!System.Text.RegularExpressions.Regex.IsMatch((sender as TextBox).Text, @"^(?!0/d)/d+(/./d*)?$"))  
  10.     {  
  11.         int index = (sender as TextBox).SelectionStart;  
  12.         (sender as TextBox).Text = (sender as TextBox).Tag as string;  
  13.         (sender as TextBox).SelectionStart = index;  
  14.     }  
  15. }  

 

好奇而已,别人发的问题。回复一下。觉得这样写比较简练。发到博客上,方便查找。

 

------------------------------------------------

2010-11-05修改一下

复制如下代码到你项目中。编译,从工具栏中拖出这个控件即可。

 

[c-sharp] view plaincopy
  1. public class NumbericTextbox : TextBox  
  2. {  
  3.     protected override void OnKeyPress(KeyPressEventArgs e)  
  4.     {  
  5.         e.Handled = !(Char.IsNumber(e.KeyChar) || e.KeyChar == (char)8 || e.KeyChar == '.');  
  6.         if (!e.Handled) this.Tag = this.Text;//记录最后一次正确输入   
  7.         base.OnKeyPress(e);  
  8.     }  
  9.     protected override void OnTextChanged(EventArgs e)  
  10.     {  
  11.         base.OnTextChanged(e);  
  12.         if (!System.Text.RegularExpressions.Regex.IsMatch((this).Text, @"^(?!0/d)/d+(/./d*)?$|"))  
  13.         {  
  14.             int index = (this).SelectionStart;  
  15.             (this).Text = (this).Tag as string;  
  16.             (this).SelectionStart = index;  
  17.         }  
  18.     }  
  19.     public const int WM_PASTE = 0x302;  
  20.     protected override void WndProc(ref Message m)  
  21.     {  
  22.         if (m.Msg == WM_PASTE)//粘贴  
  23.         {  
  24.             if (!Regex.IsMatch(Clipboard.GetText(), @"^(?!0/d)/d+(/./d*)?$|")) return;  
  25.         }  
  26.         base.WndProc(ref m);  
  27.     }  
  28. }  

 

如果不限制是数值,只是要求数字序列,把代码中的正则都换为:@"^/d+$"就可以了。