如何在C#winform中 Textbox.text中让输入的信息只能是数字,不能是符号或字母,这个if不知该怎么写尤其是(不能是符号或字母)!,谢谢各位大侠!不胜感激!,联系人:小史,QQ723201219
解决方案 »
- 关于利用WebRequest向一个网站发送数据,网站用QueryString接收不到参数的问题,高手请进,急????????????????????
- winform的项目要如何分层
- winform里的datagridview里最左上角格的默认全选能否去掉
- C#正则表达式
- 用GricView是否有防SQL注入的措施
- FileSystemWatcher.InternalBufferSize 在我的C#中找不到这个属性
- 有没有关于socket编程的电子书下栽
- 谁告诉我面向对象的核心东西是什么
- C# 连接数据库问题,我明明指定了sa用户,但NETWORK SERVICE失败?!!
- C#如何读取post方式的网页的HTML代码?
- 关于多线程的【传递参数】、【调用类里面的方法】的问题
- C#一个关于转换方面的基础问题
不能就把文本清空`
先获取文本内容,用INT32的PARASE函数进行串格式化,但将它放在TRY块内,如果是合法的数字串返回1,否则在CATCH子句中捕获异常,并返回-1
private void txtPrice_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(e.KeyChar>='0'&& e.KeyChar<='9'|| e.KeyChar==8))
{
e.Handled = true;
}
}
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;namespace USWinControls
{
///<summary>
///NumberBox 的摘要说明。
///</summary>
[ToolboxItem(true)]
[ToolboxBitmap(typeof(TextBox)), Description("UBIQ NumberBox")]
public class NumberBox : System.Windows.Forms.TextBox
{
/// <summary>
/// 获得当前进程,以便重绘控件
/// </summary>
/// <param name="hWnd"></param>
/// <returns></returns>
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); #region Constractor
public NumberBox()
: base()
{
PermitChars = new char[13];
Init();
}
#endregion #region Property
private double _MaxValue;
private double _MinValue;
private char[] _PermitChars;
private int _DecimalLength;
private double _DefaultValue; /// <summary>
/// 边框颜色
/// </summary>
private Color _BorderColor = Color.FromArgb(0xA7, 0xA6, 0xAA); /// <summary>
/// 失效时的字符颜色
/// </summary>
private Color _DisableForeColor = Color.FromName("DimGray"); /// <summary>
/// 失效时的背景颜色
/// </summary>
private Color _DisableBackColor = Color.FromName("Control"); public double MaxValue
{
get { return _MaxValue; } set { _MaxValue = value; }
} public double MinValue
{
get { return _MinValue; }
set { _MinValue = value; }
} public double DefaultValue
{
get { return _DefaultValue; }
set
{
_DefaultValue = value;
base.Text = _DefaultValue.ToString();
}
} public char[] PermitChars
{
get { return _PermitChars; }
set { _PermitChars = value; }
}
public int DecimalLength
{
get { return _DecimalLength; }
set { _DecimalLength = value; }
} /// <summary>
/// 边框颜色
/// </summary>
[Category("外观"),
Description("获得或设置控件的边框颜色"),
DefaultValue(typeof(Color), "#A7A6AA")]
public Color BorderColor
{
get { return this._BorderColor; }
set
{
this._BorderColor = value;
this.Invalidate();
}
} /// <summary>
/// 失效时的字符颜色
/// </summary>
[DefaultValue(typeof(Color), "#A7A6AA")]
[Description("失效时的字符颜色")]
public Color DisableForeColor
{
get { return this._DisableForeColor; }
set
{
this._DisableForeColor = value;
this.Invalidate();
}
} /// <summary>
/// 失效时的背景色
/// </summary>
[DefaultValue(typeof(Color), "#A7A6AA")]
[Description("失效时的背景色")]
public Color DisableBackColor
{
get { return this._DisableBackColor; }
set
{
this._DisableBackColor = value;
this.Invalidate();
}
} #endregion #region Initialize
public void Init()
{
PermitChars = new char[] { (char)43, (char)45, (char)46, (char)48, (char)49, (char)50, (char)51, (char)52, (char)53, (char)54, (char)55, (char)56, (char)57 };
DecimalLength = 0;
MaxValue = 0;
MinValue = 0;
DefaultValue = 0;
} #endregion #region WndProc Method (Overrides)
protected override void WndProc(ref System.Windows.Forms.Message m)
{ const int WM_CHAR = 0x102;
const int WM_PASTE = 0x302;
const int WM_PAINT = 0x000f; //
switch (m.Msg)
{
case WM_CHAR:
KeyPressEventArgs eKeyPress = new KeyPressEventArgs((char)m.WParam.ToInt32());
OnChar(eKeyPress); if (eKeyPress.Handled)
{
return;
} break; case WM_PASTE:
if (((PermitChars != null)) && (PermitChars.Length > 0))
{
OnPaste(new System.EventArgs());
return;
} break; } base.WndProc(ref m); //
if (WM_PAINT == m.Msg && !this.Enabled && m.HWnd == this.Handle) //textbox disable
{
Graphics g = this.CreateGraphics();
Rectangle rect; //失效时的背景颜色
rect = new Rectangle(0, 0, base.Size.Width - 1, base.Size.Height - 1);
g.FillRectangle(new SolidBrush(DisableBackColor), rect); //失效时的字符颜色
//文字描画
int x = 0, y = 0;
Size s = g.MeasureString(Text, Font).ToSize(); if (this.BorderStyle == BorderStyle.Fixed3D)
y = (Height - s.Height) / 2 - 1;
else
y = (Height - s.Height) / 2; switch (TextAlign)
{
case HorizontalAlignment.Left:
x = 2;
break;
case HorizontalAlignment.Center:
if (s.Width > Width)
x = 2;
else
x = (Width - s.Width) / 2 + 2;
break;
case HorizontalAlignment.Right:
if (s.Width > Width)
x = 2;
else
x = Width - s.Width - 2;
break;
}
rect = new Rectangle(x, y, base.Size.Width, base.Size.Height);
g.DrawString(base.Text, base.Font, new SolidBrush(DisableForeColor), rect);
g.Dispose();
}
//
if (m.Msg == 0xf || m.Msg == 0x133)
{
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == 0)
{
return;
} //只有在边框样式为FixedSingle时自定义边框样式才有效
if (this.BorderStyle == BorderStyle.FixedSingle)
{
//边框Width为1个像素
System.Drawing.Pen pen = new Pen(this._BorderColor, 1); ; //绘制边框
System.Drawing.Graphics g = Graphics.FromHdc(hDC);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawRectangle(pen, 0, 0, this.Width - 1, this.Height - 1);
pen.Dispose();
}
} } #endregion
protected virtual void OnChar(KeyPressEventArgs e)
{ if (char.IsControl(e.KeyChar))
{
switch (e.KeyChar)
{
case (char)13:
case (char)9:
if (this.MaxValue != 0)
{
if (Convert.ToInt32(this.Text) > this.MaxValue)
{
this.SelectAll();
e.Handled = true;
return;
} }
if (this.MinValue != 0)
{
if (Convert.ToInt32(this.Text) < this.MinValue)
{
this.SelectAll();
e.Handled = true;
return;
} } break; } return; } if (!HasPermitChars(e.KeyChar, this.PermitChars))
{
e.Handled = true;
return;
} switch (e.KeyChar)
{
case (char)46:
//CASE [ . ]
try
{
if (DecimalLength == 0)
{
e.Handled = true;
return;
} if (Text.Length == 0)
{
return;
} int decimalPlace = Text.IndexOf(e.KeyChar);
if (decimalPlace > 0)
{
e.Handled = true;
return;
}
} catch
{ } break; case (char)43:
case (char)45:
//CASE [ + or - ]
try
{
if (Text.Length == 0)
{
return;
} int plusPlace = Text.IndexOf((char)43);
int minusPlace = Text.IndexOf((char)45); if (plusPlace >= 0 | minusPlace >= 0)
{
e.Handled = true;
return;
} if (SelectionStart >= 1)
{
e.Handled = true;
return;
}
} catch
{ } break; default:
//CASE [ NUMBER ]
if (DecimalLength == 0)
{
return;
}
if (Text.Length == 0)
{
return;
}
int dStart = Text.IndexOf((char)46);
if (dStart >= 0)
{
if (SelectionStart <= dStart)
{
return;
}
else
{
int dLen = (Text.Length + 1) - (dStart + 1);
if (dLen > _DecimalLength)
{
e.Handled = true;
return;
}
} } break; } } #endregion #region OnPaste Method (Overridable) //Method of call when Paste it
protected virtual void OnPaste(System.EventArgs e)
{
string stString = Clipboard.GetDataObject().GetData(System.Windows.Forms.DataFormats.Text).ToString(); if ((stString != null))
{
SelectedText = GetPermitedString(stString, PermitChars);
} } #endregion #region [S] HasPermitChars Method //The value in which it is shown whether it is a permitted character is returned.
private static bool HasPermitChars(char chTarget, char[] chPermits)
{
foreach (char ch in chPermits)
{
if (chTarget == ch)
{
return true;
}
}
return false; } #endregion #region [S] GetPermitedString Method //Only the permitted character is connected and returned
private static string GetPermitedString(string stTarget, char[] chPermits)
{
string stReturn = string.Empty; foreach (char chTarget in stTarget)
{
if (HasPermitChars(chTarget, chPermits))
{
return stReturn;
} } return stReturn;
} #endregion
}}
代码如下,即可实现Textbox.text中让输入的信息只能是数字
private void txtNumber_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = e.KeyChar<'0'||e.KeyChar>'9';
if(e.KeyChar==(Char)8)
{
e.Handled = false;
} }