winForm程序,控制textbox只能输入数字(非常急,在线等) 在winForm程序中,如何控制textbox只能输入数字不要在text_change事件中写的那种效果想要控制在textbox输入的时候,就只能输数字进去输汉字和字母都输不进去 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"> private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if(e.KeyChar>='0'&&e.KeyChar<='9') e.Handled=false; else e.Handled=true;} 用正则,或者ascII判断一下就是了。 if (e.KeyChar != '\b' && e.KeyChar != '\n') { if (e.KeyChar < '0' || e.KeyChar > '9') { e.Handled = true; } else { e.Handled = false; } } 按照您的方法做过限制的textbox,同样可以输入字母,汉字等等.. string RegexText = @"^-?[1-9]\d*$"; regex = new Regex(RegexText); if(!regex.IsMatch(e.KeyChar))e.Handled=true; 这个没有问题:string RegexText = @"^-?[1-9]\d*$"; regex = new Regex(RegexText); if(!regex.IsMatch(e.KeyChar))e.Handled=true; private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar >= '0' && e.KeyChar <= '9') e.Handled = false; else e.Handled = true; } private void txtZW_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) {// if (!(Char.IsNumber(e.KeyChar)||e.KeyChar==8)) //|| e.KeyChar == '.' // { // e.Handled=true; // } if(e.KeyChar>='0'&&e.KeyChar <='9') { e.Handled = true; } } private void txtZW_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) {// if (!(Char.IsNumber(e.KeyChar)||e.KeyChar==8)) //|| e.KeyChar == '.' // { // e.Handled=true; // } if(e.KeyChar>='0'&&e.KeyChar <='9') { e.Handled = false; } else { e.Handled = true; } }这两种都不行 private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if(e.KeyChar>='0'&&e.KeyChar <='9') e.Handled=false; else e.Handled=true; } 完全OK!为 控件添加 KeyPress 事件,调用! 各位,我写在textBox1_KeyPress中,你们试试,刚开始是能够满足要求的,但是你们将光标移到其他控件,然后再移回来,然后输入字母和汉字都可以,或者切换个输入法,再次输入汉字或者字母也都是可以的 可是我刚才试了,就是不行啊,放在keyPress事件里,第一次能够达到要求,只可以输入数字,但之后切换就不行了,就可以输入汉字和字母了,还有regex需要引用什么命名空间呢 奇怪 这应该和版本没关系using System.Text.RegularExpressions; 参考://TextBox只输入字母private void textBox1_KeyPress(object sender, KeyPressEventArgs e){//只有字母及控制键有效if (!Char.IsLetter(e.KeyChar) && !Char.IsControl(e.KeyChar)){e.KeyChar = '\0';}}private void textBox1_Enter(object sender, EventArgs e){textBox1.ImeMode = ImeMode.Disable;//确保只输入英文} C# codeif (e.KeyChar!='\b'&& e.KeyChar!='\n') {if (e.KeyChar <'0'|| e.KeyChar>'9') { e.Handled=true; }else { e.Handled=false; } } 这样写法可以是可以,但是如果用ctrl+v粘贴到textbox中同样能输入其他字符的,最好再用leave事件控制下比较严谨 string RegexText = @"^-?[1-9]\d*$";regex = new Regex(RegexText);if(!regex.IsMatch(e.KeyChar))e.Handled=true; 我不明白你为什么不直接使用 NumericUpDown 控件呢? private void Form2_Load(object sender, EventArgs e) { textBox1.ContextMenu = new ContextMenu(); textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress); } void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if ((int)e.KeyChar == 22) { e.Handled = true; } } 那就加上输入法判断试试KeyPress事件//不是美式输入法if(InputLanguage.CurrentInputLanguage != InputLanguage.DefaultInputLanguage){ InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;} using System.Runtime.InteropServices; private void textbox_Leave(object sender, EventArgs e) { TextBox txt = (TextBox)sender; Regex Reg = new Regex(@"^(?:(?:[01]\d)|(?:2[0-3]))[0-5]\d$"); if (!Reg.IsMatch(txt.Text) && txt.Text.Length > 0) { MessageBox.Show(txt.Tag + "格式输入错误!"); txt.Focus(); } } ls mm头像好像是本人 不错 //只能输入数字 private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if(e.KeyChar>='0' && e.KeyChar<='9') { e.Handled=false; } else{ e.Handled=true; } } //禁止输入法 private void textBox1_Enter(object sender, System.EventArgs e) { textBox1.ImeMode= ImeMode.Disable; } //如果复制的内容不是纯数字,清除内容 private void textBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == MouseButtons.Right){ try { System.Int64.Parse("" + Clipboard.GetDataObject().GetData(DataFormats.Text)); } catch(System.FormatException ex){ Clipboard.SetDataObject(""); } } } 也写在KetPress事件里么 ? /// <summary> /// 判断只能输入数字 /// </summary> /// <param name="strValue">用户输入的值</param> /// <returns>非数字:FALSE;数字:TRUE</returns> public bool isNumeric(string strValue) { System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[-]?\d+[.]?\d*$"); return reg1.IsMatch(strValue); } protected override void OnKeyPress(KeyPressEventArgs e) { switch (emtype) { case _EmType.Int: if (!char.IsDigit(e.KeyChar)&&e.KeyChar != '\b') { e.Handled = true; } break; case _EmType.Decimal: if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b'&&e.KeyChar!='-'&&e.KeyChar!='.') { e.Handled = true; } else if (this.Text.Split('.').Length == 2 && e.KeyChar == '.') { e.Handled = true; } else if(this.Text.Split('-').Length == 2 && e.KeyChar == '-') { e.Handled = true; } break; } base.OnKeyPress(e); } emtype自定义属性int或者Decimal类型protected override void OnKeyPress(KeyPressEventArgs e) { switch (emtype) { case "Int": if (!char.IsDigit(e.KeyChar)&&e.KeyChar != '\b') { e.Handled = true; } break; case "Decimal": if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b'&&e.KeyChar!='-'&&e.KeyChar!='.') { e.Handled = true; } else if (this.Text.Split('.').Length == 2 && e.KeyChar == '.') { e.Handled = true; } else if(this.Text.Split('-').Length == 2 && e.KeyChar == '-') { e.Handled = true; } break; } base.OnKeyPress(e); } 靠真有傻帽,已经说了是winforms了还用js,真傻帽呀 搞这么复杂干吗???用maskedTextBox设Mask 为99999999999就好了 两个组合使用,可以设置公式;你的要求只使用一个就可以了。private void txtNum_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar == '\b') || (e.KeyChar == '.')) { e.Handled = false; // 允许输入 int pos = txtNum.SelectionStart; int intLength = txtNum.Text.Length; if ((intLength == txtNum.MaxLength) && (pos < txtNum.MaxLength)) { txtNum.SelectionLength = 1; if ((txtNum.SelectedText == ".") && (e.KeyChar != '.')) { ++txtNum.SelectionStart; } } if ((e.KeyChar == '.') && (txtNum.Text.IndexOf('.') > -1)) { e.Handled = true; if ((pos < intLength - 1) && (txtNum.Text.Substring(pos, 1) == ".")) { txtNum.SelectionStart = ++pos; } } if ((decimalLength == 0) && (e.KeyChar == '.')) // 如果是保留零位小数﹐则不允许输入点号 { e.Handled = true; } } else { MessageBox.Show("只能输入数字", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information); e.Handled = true; } } private void txtNum_KeyUp(object sender, KeyEventArgs e) { int pos = txtNum.SelectionStart; string strValue = txtNum.Text.Trim(); if (decimalLength == 0) { // 当文本框中只输入整数时 while (strValue.Substring(0, 1) == "0") { // 去除整数部份最前右侧的 if (strValue.Length > 1) { strValue = strValue.Substring(1, strValue.Length - 1); if (pos > 0) { --pos; } } else { break; } } txtNum.Text = strValue; } else { // 当文本框用于输入小数时 int pointPs = strValue.IndexOf('.'); if (pointPs < 0) { strValue += ".".PadRight(decimalLength, '0'); } if (pointPs == 0) { strValue = "0" + strValue; txtNum.SelectionStart = ++pos; } // 自动使其保留两位小数 string[] strs = strValue.Split(new char[] { '.' }); strs[0] = strs[0].Length > 0 ? strs[0] : "0"; // 去除整数部份最前右侧的 while (strs[0].Substring(0, 1) == "0") { if (strs[0].Length > 1) { strs[0] = strs[0].Substring(1, strs[0].Length - 1); if (pos > 0) { --pos; } } else { break; } } // 取得小数字数的数字,如果不足小数字长度﹐则以填补 if (strs[1].Length < decimalLength) { strs[1] = strs[1].PadRight(decimalLength, '0'); } txtNum.Text = strs[0] + "." + strs[1]; } txtNum.SelectionStart = pos; try { //txtAllMoney.Text = Convert.ToString(Convert.ToDecimal(txtMoney1.Text) + Convert.ToDecimal(txtMoney2.Text) + Convert.ToDecimal(txtMoney3.Text)); } catch { MessageBox.Show("输入数字不是有效数字", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information); e.Handled = true; } } private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e){if(e.KeyChar>='0'&&e.KeyChar <='9')e.Handled=false;elsee.Handled=true;} TextBox.ImeMode=ImeMode.Number;这个估计可以吧 怎么控制dataGrid只能选择一行 ? dataGrid有个多行选择的属性,设定就好了 怎么控制dataGrid只能选择一行 ? 不好意思,我一直用LISTVIEW,也以為你用的這個 用MaskTextBox控件啊 现成的 <asp:textbox onkeypress="isnum()" id="TextBox1" runat="server"></asp:textbox> 在页面中添加一段脚本:<script language="javascript"> function isnum() { if(event.keyCode<45 || event.keyCode>57) { event.keyCode=0; } } </script> 用MaskTextBox控件啊 现成的 private void txtDelKey_KeyPress(object sender, KeyPressEventArgs e) { if (!(char.IsDigit(e.KeyChar) || e.KeyChar == '\b')) { e.Handled = true; } } |zyciis| 如何得到当前执行的方法的名称,谢谢 我怎么在ASP.NET第一步这本书中找不到自定义分页的教程 请教一个问题,高分送上! 在GridView的DataNavigateUrlFormatString中如何使用 <%=%> 怎样提高打开文件速度 关于调用存储过程传参数的问题 网页上有错误? .net 怎么写json,怎么调用,怎么给别人用 Webcontrol的treeview 怎么响应鼠标单击事件 1.txt,10.txt ,2.txt,3txt 排序 动态表格 删除行 问题 和取值问题 ?大哥,大姐们,帮帮我啊,这个问题研究了两天了,还没做出来 dropdownlist
{
if(e.KeyChar>='0'&&e.KeyChar<='9')
e.Handled=false;
else
e.Handled=true;
}
if (e.KeyChar != '\b' && e.KeyChar != '\n')
{
if (e.KeyChar < '0' || e.KeyChar > '9')
{
e.Handled = true;
}
else
{
e.Handled = false;
}
}
按照您的方法做过限制的textbox,同样可以输入字母,汉字等等..
string RegexText = @"^-?[1-9]\d*$";
regex = new Regex(RegexText);
if(!regex.IsMatch(e.KeyChar))
e.Handled=true;
string RegexText = @"^-?[1-9]\d*$";
regex = new Regex(RegexText);
if(!regex.IsMatch(e.KeyChar))
e.Handled=true;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar >= '0' && e.KeyChar <= '9')
e.Handled = false;
else
e.Handled = true; }
{
// if (!(Char.IsNumber(e.KeyChar)||e.KeyChar==8)) //|| e.KeyChar == '.'
// {
// e.Handled=true;
// }
if(e.KeyChar>='0'&&e.KeyChar <='9')
{
e.Handled = true;
}
}
{
// if (!(Char.IsNumber(e.KeyChar)||e.KeyChar==8)) //|| e.KeyChar == '.'
// {
// e.Handled=true;
// }
if(e.KeyChar>='0'&&e.KeyChar <='9')
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}这两种都不行
{
if(e.KeyChar>='0'&&e.KeyChar <='9')
e.Handled=false;
else
e.Handled=true;
}
完全OK!为 控件添加 KeyPress 事件,调用!
可是我刚才试了,就是不行啊,放在keyPress事件里,第一次能够达到要求,只可以输入数字,但之后切换就不行了,就可以输入汉字和字母了,还有regex需要引用什么命名空间呢
using System.Text.RegularExpressions;
{
//只有字母及控制键有效
if (!Char.IsLetter(e.KeyChar) && !Char.IsControl(e.KeyChar))
{
e.KeyChar = '\0';
}
}private void textBox1_Enter(object sender, EventArgs e)
{
textBox1.ImeMode = ImeMode.Disable;//确保只输入英文
}
{if (e.KeyChar <'0'|| e.KeyChar>'9')
{
e.Handled=true;
}else
{
e.Handled=false;
}
}
这样写法可以是可以,但是如果用ctrl+v粘贴到textbox中同样能输入其他字符的,最好再用leave事件控制下比较严谨
regex = new Regex(RegexText);
if(!regex.IsMatch(e.KeyChar))
e.Handled=true;
private void Form2_Load(object sender, EventArgs e)
{ textBox1.ContextMenu = new ContextMenu(); textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
} void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((int)e.KeyChar == 22)
{
e.Handled = true;
}
}
KeyPress事件
//不是美式输入法
if(InputLanguage.CurrentInputLanguage != InputLanguage.DefaultInputLanguage)
{
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
}
private void textbox_Leave(object sender, EventArgs e)
{
TextBox txt = (TextBox)sender;
Regex Reg = new Regex(@"^(?:(?:[01]\d)|(?:2[0-3]))[0-5]\d$");
if (!Reg.IsMatch(txt.Text) && txt.Text.Length > 0)
{
MessageBox.Show(txt.Tag + "格式输入错误!");
txt.Focus();
}
}
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar>='0' && e.KeyChar<='9')
{
e.Handled=false;
}
else{
e.Handled=true;
}
} //禁止输入法
private void textBox1_Enter(object sender, System.EventArgs e)
{
textBox1.ImeMode= ImeMode.Disable;
} //如果复制的内容不是纯数字,清除内容
private void textBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Right){
try
{
System.Int64.Parse("" + Clipboard.GetDataObject().GetData(DataFormats.Text));
}
catch(System.FormatException ex){
Clipboard.SetDataObject("");
}
}
}
也写在KetPress事件里么 ?
/// <summary>
/// 判断只能输入数字
/// </summary>
/// <param name="strValue">用户输入的值</param>
/// <returns>非数字:FALSE;数字:TRUE</returns>
public bool isNumeric(string strValue)
{
System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[-]?\d+[.]?\d*$");
return reg1.IsMatch(strValue);
}
{
switch (emtype)
{
case _EmType.Int:
if (!char.IsDigit(e.KeyChar)&&e.KeyChar != '\b')
{
e.Handled = true;
}
break;
case _EmType.Decimal:
if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b'&&e.KeyChar!='-'&&e.KeyChar!='.')
{
e.Handled = true;
}
else if (this.Text.Split('.').Length == 2 && e.KeyChar == '.')
{
e.Handled = true;
}
else if(this.Text.Split('-').Length == 2 && e.KeyChar == '-')
{
e.Handled = true;
}
break;
}
base.OnKeyPress(e);
}
{
switch (emtype)
{
case "Int":
if (!char.IsDigit(e.KeyChar)&&e.KeyChar != '\b')
{
e.Handled = true;
}
break;
case "Decimal":
if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b'&&e.KeyChar!='-'&&e.KeyChar!='.')
{
e.Handled = true;
}
else if (this.Text.Split('.').Length == 2 && e.KeyChar == '.')
{
e.Handled = true;
}
else if(this.Text.Split('-').Length == 2 && e.KeyChar == '-')
{
e.Handled = true;
}
break;
}
base.OnKeyPress(e);
}
用maskedTextBox
设Mask 为99999999999就好了
private void txtNum_KeyPress(object sender, KeyPressEventArgs e)
{ if ((e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar == '\b') || (e.KeyChar == '.'))
{
e.Handled = false; // 允许输入
int pos = txtNum.SelectionStart;
int intLength = txtNum.Text.Length; if ((intLength == txtNum.MaxLength) && (pos < txtNum.MaxLength))
{
txtNum.SelectionLength = 1;
if ((txtNum.SelectedText == ".") && (e.KeyChar != '.'))
{
++txtNum.SelectionStart;
} } if ((e.KeyChar == '.') && (txtNum.Text.IndexOf('.') > -1))
{
e.Handled = true;
if ((pos < intLength - 1) && (txtNum.Text.Substring(pos, 1) == "."))
{
txtNum.SelectionStart = ++pos;
}
} if ((decimalLength == 0) && (e.KeyChar == '.')) // 如果是保留零位小数﹐则不允许输入点号
{
e.Handled = true;
}
}
else
{
MessageBox.Show("只能输入数字", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
e.Handled = true;
}
} private void txtNum_KeyUp(object sender, KeyEventArgs e)
{
int pos = txtNum.SelectionStart;
string strValue = txtNum.Text.Trim(); if (decimalLength == 0)
{ // 当文本框中只输入整数时
while (strValue.Substring(0, 1) == "0")
{ // 去除整数部份最前右侧的
if (strValue.Length > 1)
{
strValue = strValue.Substring(1, strValue.Length - 1);
if (pos > 0)
{
--pos;
}
}
else
{
break;
}
}
txtNum.Text = strValue;
}
else
{ // 当文本框用于输入小数时
int pointPs = strValue.IndexOf('.');
if (pointPs < 0)
{
strValue += ".".PadRight(decimalLength, '0');
}
if (pointPs == 0)
{
strValue = "0" + strValue;
txtNum.SelectionStart = ++pos;
} // 自动使其保留两位小数
string[] strs = strValue.Split(new char[] { '.' });
strs[0] = strs[0].Length > 0 ? strs[0] : "0"; // 去除整数部份最前右侧的
while (strs[0].Substring(0, 1) == "0")
{
if (strs[0].Length > 1)
{
strs[0] = strs[0].Substring(1, strs[0].Length - 1);
if (pos > 0)
{
--pos;
}
}
else
{
break;
}
} // 取得小数字数的数字,如果不足小数字长度﹐则以填补
if (strs[1].Length < decimalLength)
{
strs[1] = strs[1].PadRight(decimalLength, '0');
}
txtNum.Text = strs[0] + "." + strs[1];
}
txtNum.SelectionStart = pos; try
{
//txtAllMoney.Text = Convert.ToString(Convert.ToDecimal(txtMoney1.Text) + Convert.ToDecimal(txtMoney2.Text) + Convert.ToDecimal(txtMoney3.Text));
}
catch
{
MessageBox.Show("输入数字不是有效数字", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
e.Handled = true;
} }
{
if(e.KeyChar>='0'&&e.KeyChar <='9')
e.Handled=false;
else
e.Handled=true;
}
不好意思,我一直用LISTVIEW,也以為你用的這個
<script language="javascript">
function isnum()
{
if(event.keyCode<45 || event.keyCode>57)
{
event.keyCode=0;
}
}
</script>
{
if (!(char.IsDigit(e.KeyChar) || e.KeyChar == '\b'))
{
e.Handled = true;
}
}