日期:2014-05-18 浏览次数:21007 次
/// <summary> /// 只能对数值操作的TextBox。 /// </summary> public class TextBoxNumEx : System.Windows.Forms.TextBox { public TextBoxNumEx() { // // TODO: 在此处添加构造函数逻辑 // } protected override void WndProc(ref Message m) { switch (m.Msg) { case 0x0102: bool isSign = ((int)m.WParam == 45); bool isNum = ((int)m.WParam >= 48) && ((int)m.WParam <= 57); bool isBack = (int)m.WParam == (int)Keys.Back; bool isDelete = (int)m.WParam == (int)Keys.Delete; bool isCtr = ((int)m.WParam == 24) || ((int)m.WParam == 22) || ((int)m.WParam == 26) || ((int)m.WParam == 3); if (isNum || isBack || isCtr) { base.WndProc(ref m); } if (isSign) { if (this.SelectionStart != 0) { break; } base.WndProc(ref m); break; } if (isDelete) { if (this.Text.IndexOf(".") < 0) { base.WndProc(ref m); } } if ((int)m.WParam == 1) { this.SelectAll(); } break; case 0x0302: IDataObject iData = Clipboard.GetDataObject();//取剪贴板对象 if (iData.GetDataPresent(DataFormats.Text)) //判断是否是Text { string str = (string)iData.GetData(DataFormats.Text);//取数据 if (MatchNumber(str)) { base.WndProc(ref m); break; } } m.Result = (IntPtr)0;//不可以粘贴 break; default: base.WndProc(ref m); break; } } private bool MatchNumber(string numberText) { if (string.IsNullOrEmpty(numberText)) { return false; } int index = 0; string strNum = "-0.123456789"; index = numberText.IndexOf(strNum[0]); if (index >= 0) { if (numberText.Length == 1 || numberText.IndexOf(strNum[0], index + 1) > 0) { return false; } } index = numberText.IndexOf(strNum[2]); if (index != -1) { index = numberText.IndexOf(strNum[2], index + 1); if (index != -1) { return false; } } return true; } } //参考一下
------解决方案--------------------
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> <script> function only() { if(event.keyCode==222)event.returnValue=false; } </script> </head> <body> <form id="form1" runat="server"> <div> <input id="Text1" type="text" onkeydown="only()" /></div> </form> </body> </html>
------解决方案--------------------
用keyCode值或者码值进行判断
------解决方案--------------------
在validting事件里判断text是否含有'
有的话就执行e.cancel=true;直到输对了否则不许跳出text。
------解决方案--------------------
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ( e.KeyChar == 39)
{
e.Handled = true;
}
}