[转]设置检查文本框中为数字方法。

在Textbox的輸入中﹐我們常常需要控制輸入的類型﹐比如說只能輸入數字﹐當然實現的方法很多﹐我總結了一下我做過的一些項目﹐我常會使用以下這三種﹕
1﹑使用Try...Catch
         private   static   bool  IsNumeric( string  itemValue, int  intFLag)
        
{
            
try
            
{
                
int i = Convert.ToInt32(itemValue);
                
return true;
            }

            
catch
            
{
                
return false;
            }

        }
2﹑使用正則表達式
using  System.Text.RegularExpressions;
        
         
private   static   bool  IsNumeric( string  itemValue) 
        
{
            
return (IsRegEx("^(-?[0-9]*[.]*[0-9]{0,3})$", itemValue));
        }
 

        
private   static   bool  IsRegEx( string  regExValue,  string  itemValue) 
        
{
            
try 
            
{
                Regex regex 
= new System.Text.RegularExpressions.Regex(regExValue);
                
if (regex.IsMatch(itemValue)) return true;
                
else                          return false;
            }

            
catch (Exception ) 
            
{
                
return false;
            }

            
finally 
            
{
            }

        }


3﹑判斷輸入的keyCode
         public   static   bool  IsNumeric(System.Windows.Forms.KeyPressEventArgs e)
        
{
            
if ((e.KeyChar  >= (char)48 && e.KeyChar<=(char)57|| 
                 e.KeyChar 
==(char)8 || e.KeyChar ==(char)45 || e.KeyChar ==(char)47)
            
{
            }

            
else
            
{
    e.Handled
=true;  
            }

            
return true;
        }
  @东海风
真是明眼人﹐第一種方法確實是只檢測0~9的整數的﹗
第二種方法﹐說實在的﹐你是第一個幫我指出來的。謝謝﹗­
return (IsRegEx(@"^/-?/(?([0-9]{0,3}(/,?[0-9]{3})*(/.?[0-9]*))/)?$", itemValue));
第三種方法﹐我是在KeyPress中調用﹐如果粘貼過來的是無法保存的(因為我是有綁定數據﹐綁定的類型是數值型)。而且是無法輸入漢字的﹐你可以試試。
當然﹐要禁止粘貼的話﹐我是有寫一個新Textbox控件的﹐一并將源碼貼出來﹕
///
/// 只有輸入數字的TextBox控件﹐如果去掉ProcessKeyEventArgs方法﹐而可實現只粘貼數字。
///

[Designer(typeof(NumberTextBox.NumberTextBoxDesigner))]
public class NumberTextBox:System.Windows.Forms.TextBox
{
public const int WM_PASTE = 0x0302;//粘貼消息
public const int WM_CHAR = 0x0102;//輸入字符消息(鍵盤輸入的)
[DllImport("user32.dll")]
public static extern bool MessageBeep(uint UType);
protected override bool ProcessKeyEventArgs(ref Message m)
{
int nKey = m.WParam.ToInt32();
if ((nKey >= (char)48 && nKey<=(char)57) ||
nKey ==(char)8 || nKey ==(char)45 || nKey ==(char)46)
{
return base.ProcessKeyPreview(ref m);
}
else
{
if (m.Msg==256 && nKey ==46)
return base.ProcessKeyPreview(ref m);
if (m.Msg ==258)
{
MessageBeep(0);
}
}
return true;
}

protected override void WndProc(ref Message m)
{
if(m.Msg == WM_CHAR)//取m.WParam 進行判斷m.WParam 就是用戶輸入的字元的 int 表示方式,如果是被限制的字元直接 Return不走base.WndProc(ref m);
{
int keyChar = m.WParam.ToInt32();
bool charOk=(keyChar>47 && keyChar<58) || //數字
keyChar==8 || //退格
keyChar==3 || keyChar==22 || keyChar==24;//拷貝﹑粘貼﹑刪除
if(!charOk)return;
}
if(m.Msg == WM_PASTE)//判斷剪貼板的資料是否是符合要求如果符合不做任何處理否則 Return不走base.WndProc(ref m)
{
IDataObject iData = Clipboard.GetDataObject();//取剪貼板物件
if(iData.GetDataPresent(DataFormats.Text)) //判斷是否是Text
{
string str;
str = (String)iData.GetData(DataFormats.Text); //取資料
/*如果需要正負號,先要判斷TextBox 上游標的位置,如果游標在最前面可以用這個,^(((/+|-)/d)?/d*)$ */
if (!System.Text.RegularExpressions.Regex.IsMatch(str,@"^(/d{1,})$")) return;//如果是數位(可以粘貼跳出)
}
}
base.WndProc (ref m);
}
internal class NumberTextBoxDesigner:ControlDesigner
{
protected override void PostFilterProperties(System.Collections.IDictionary properties)
{
properties.Remove("Text");
}
}
}
原文地址“http://www.cnblogs.com/jinliangliu/archive/2007/03/15/340496.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值