C#中TextBox控件只允许输入数字的代码
C#项目中接触了TextBox只允许输入数字的问题,这倒不难,如下:
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
e.Handled = e.KeyChar < '0' || e.KeyChar > '9'; //允许输入数字
if(e.KeyChar==(char)8) //允许输入回退键
{
e.Handled=false;
}
}
但是如果要输入小数点,做成象 计算器的那样,可真难了我几天,网上搜索了半天也没答案,
还是自己写吧,效果不错(高手不要笑我,没什么难度,只是自己的一点小经验),
有 兴趣的朋友可以看看:
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
string str=this.textBox1.Text;
e.Handled = e.KeyChar < '0' || e.KeyChar > '9'; //允许输入数字
if(e.KeyChar==(char)8) //允许输入回退键
{
e.Handled=false;
}
if(e.KeyChar==(char)46)
{
if(str=="") //第一个不允许输入小数点
{
e.Handled=true;
return;
}
else
{ //小数点不允许出现2次
foreach(char ch in str)
{
if(char.IsPunctuation(ch))
{
e.Handled=true;
return;
}
}
e.Handled=false;
}
}
}
看大家还有什么好的办法解决小数位点的问题
C# 控件
[解决办法]
//小数点按钮被点击的时候 触发的事件
if (first != "")
{//如果当前的得到字符 first不为空
string[] n = first.Split('.');
//用‘.’分割字符 first 得到的字符等于1说明 该字符中已存在小数点
if (n.Length == 1)
{
//设置小数点按钮不可用
btnd.Enabled = false;
}
first += ".";
txtResult.Text = first;
}
//如果当前字符为空
if (first == "")
{
//默认添加字符 "0."
first = "0.";
txtResult.Text = first;
btnd.Enabled = false;
}
if ((e.KeyChar < '0' && e.KeyChar != '.'
[解决办法]
e.KeyChar > '9' && e.KeyChar != '.'
[解决办法]
((TextBox)(sender)).Text.IndexOf('.') >= 0 && e.KeyChar == '.') && e.KeyChar != (char)13 && e.KeyChar != (char)8)
{
e.Handled = true;
}
//只能输入整型
if (!(Char.IsNumber(e.KeyChar)
[解决办法]
e.KeyChar == '\b'))
{
e.Handled = true;
return;
}
//浮点类型
int keyValue = (int)e.KeyChar;
if ((keyValue >= 48 && keyValue <= 57)
[解决办法]
keyValue == 8
[解决办法]
keyValue == 46)
{
if (sender != null && sender is TextBox && keyValue == 46)
{
if (((TextBox)sender).Text.IndexOf(".") >= 0)
e.Handled = true;
else
e.Handled = false;
}
else
e.Handled = false;
}
else
e.Handled = true;
//keydown的复制粘贴
/// <summary>
/// 验证类型
/// </summary>
public enum VType
{
/// <summary>
/// 整型
/// </summary>
Int,
/// <summary>
/// 字符串类型
/// </summary>
String,
/// <summary>
/// 浮点类型
/// </summary>
Decimal
}
public static void KeyDown(object sender, KeyEventArgs e,VType vtype)
{
if ((e.Control) && (e.KeyCode == System.Windows.Forms.Keys.C
[解决办法]
e.KeyCode == System.Windows.Forms.Keys.V))
{
string r = "";
TextBox tb = (TextBox)sender;
if (vtype == VType.Int)
r = @"^[0-9]+$";
if (vtype == VType.Decimal)
r = @"^[0-9]+\.[0-9]+
[解决办法]
[0-9]+$";
if (e.KeyCode == System.Windows.Forms.Keys.V)
{
Regex reg = new Regex(r);
if (reg.IsMatch(Clipboard.GetText()))
tb.Text = Clipboard.GetText();
}
else if (e.KeyCode == System.Windows.Forms.Keys.C)
{
Clipboard.SetText(tb.Text);
}
}
}