对于我的程序,输入员工信息 - 如身份证,姓名,年薪和年薪。我制作了ID和工资箱numericupdown,但是我想让工资箱成为只需要数字的文本框。仅允许输入数字而不是在C#中输入NumericUpDown的文本框
但是,当我尝试从numericupdown更改为文本框时发生错误,说“不能隐式地将字符串转换为”十进制“。我也有另一个按钮,发现最低工资等,但是什么问题?我想创建例外,使文本框只需要数字,但它不会让我:/
对于我的程序,输入员工信息 - 如身份证,姓名,年薪和年薪。我制作了ID和工资箱numericupdown,但是我想让工资箱成为只需要数字的文本框。仅允许输入数字而不是在C#中输入NumericUpDown的文本框
但是,当我尝试从numericupdown更改为文本框时发生错误,说“不能隐式地将字符串转换为”十进制“。我也有另一个按钮,发现最低工资等,但是什么问题?我想创建例外,使文本框只需要数字,但它不会让我:/
当我试图改变从的NumericUpDown到文本框时出现错误,说:“不能隐式转换‘字符串’到‘小数’。
。
这在我看来就像一个错误铸造
employee.EmployeeId = (int)idNumericUpDown.Value;
试试这个:
employee.EmployeeId = decimal.Parse(idNumericUpDown.Value);
而且也看看TryParse
,这是更清洁。
当我这样做时,它不喜欢“价值”部分?总是这样做 – user1336868 2012-04-18 15:15:40
将.Value更改为.Text。 – DoctorMick 2012-04-18 15:19:39
非常感谢你! – user1336868 2012-04-18 15:23:03
如何在C#创建一个数字文本框
http://msdn.microsoft.com/en-us/library/ms229644(v=vs.90).aspx
最简单的形式:
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
此代码只是吞下任何不是数字的按键。 MSDN的链接解释如何然而,处理事情像小数点等
这太棒了,谢谢! – user1336868 2012-04-18 15:26:33
你还能够在这样的TextBox上使用复制/粘贴吗? – comecme 2012-04-18 16:04:54
@comecme:这是一个很好的问题。顾名思义,“OnKeyPress”只验证击键。 – 2012-04-18 16:09:13
这是我总是为我的文本框做的事情。
功能(允许所有数值和退格键):
private bool NumericOnly(char e)
{
return (e > (char)47 & e < (char)58) | e == (char)8;
}
和onkeypress事件文本框的事件:
if (!NumericOnly(e.KeyChar)) e.Handled = true;
这里是一个破解我发现。您可以隐藏的NumericUpDown的箭头控制是这样的:
private void RemoveArrows(NumericUpDown numericUpDown)
{
Control updown = numericUpDown.Controls[0];
updown.Left += updown.Width;
updown.Visible = false;
}
只需调用此方法为您的NumericUpDown控件(例如,在Form_Load事件处理程序):
private void Form2_Load(object sender, EventArgs e)
{
RemoveArrows(idNumericUpDown);
RemoveArrows(salaryNumericUpDown);
}
其他方式 - create numeric text box,或使用解析和验证:
CausesValidation
属性设置为true
用于文本框(默认情况下为true)。如果不能从文本框中的文本分析十进制值,则会在文本框附近显示错误标志,并显示消息“仅允许数字值”。
private void NumericTextBox_Validating(object sender, CancelEventArgs e)
{
TextBox textBox = sender as TextBox;
decimal value;
if (Decimal.TryParse(textBox.Text, out value))
{
errorProvider1.SetError(textBox, "");
return;
}
e.Cancel = true;
errorProvider1.SetError(textBox, "Only numeric values allowed");
}
建议 - 使用的NumericUpDown控件用于输入数字,因为它说用户“看到这个箭头我在这里只输入数字?!”。而文本框没有提到它接受的文本格式。
您可以创建一个“蒙面”文本框,该文本框只允许在添加到现有文本时匹配正则表达式的字符。
它的短:
首先,制定一个正则表达式是你的“编辑掩码”。对于数字,它可以像^\d*$
(任意长度的整数)一样简单,也可以与^(\d{1,3}(,?\d\d\d)*(.\d{1,})?)?$
(带可选逗号和可选小数部分的数字)一样复杂。将其分配给派生自TextBox的新控件的公共属性。
然后,覆盖的OnKeyPress在派生文本看起来是这样的:
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!Regex.Match(new StringBuilder(Text).Append(e.KeyChar).ToString(), MaskPattern))
{
e.Handled = true;
}
else
base.OnKeyPress(e);
}
就像罗伯特·哈维的回答,这种方法将“吞”按任何键,当附加到当前文本值该文本框与正则表达式不匹配。您可以使用此MaskedTextBox不仅用于数字条目,而且用于仅需要纯数字值,仅包含字母数字(无符号或空白),有效本地或网络路径,IP地址等的文本框。
WPF?的WinForms?的WebForms?其他一些形式? – Oded 2012-04-18 15:10:40