2012-04-18 126 views
2

对于我的程序,输入员工信息 - 如身份证,姓名,年薪和年薪。我制作了ID和工资箱numericupdown,但是我想让工资箱成为只需要数字的文本框。仅允许输入数字而不是在C#中输入NumericUpDown的文本框

但是,当我尝试从numericupdown更改为文本框时发生错误,说“不能隐式地将字符串转换为”十进制“。我也有另一个按钮,发现最低工资等,但是什么问题?我想创建例外,使文本框只需要数字,但它不会让我:/

+0

WPF?的WinForms?的WebForms?其他一些形式? – Oded 2012-04-18 15:10:40

回答

4

当我试图改变从的NumericUpDown到文本框时出现错误,说:“不能隐式转换‘字符串’到‘小数’。

这在我看来就像一个错误铸造

employee.EmployeeId = (int)idNumericUpDown.Value; 

试试这个:

employee.EmployeeId = decimal.Parse(idNumericUpDown.Value); 

而且也看看TryParse,这是更清洁。

+0

当我这样做时,它不喜欢“价值”部分?总是这样做 – user1336868 2012-04-18 15:15:40

+0

将.Value更改为.Text。 – DoctorMick 2012-04-18 15:19:39

+0

非常感谢你! – user1336868 2012-04-18 15:23:03

9

如何在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的链接解释如何然而,处理事情像小数点等

+0

这太棒了,谢谢! – user1336868 2012-04-18 15:26:33

+0

你还能够在这样的TextBox上使用复制/粘贴吗? – comecme 2012-04-18 16:04:54

+0

@comecme:这是一个很好的问题。顾名思义,“OnKeyPress”只验证击键。 – 2012-04-18 16:09:13

1

这是我总是为我的文本框做的事情。

功能(允许所有数值和退格键):

private bool NumericOnly(char e) 
     { 
      return (e > (char)47 & e < (char)58) | e == (char)8; 
     } 

和onkeypress事件文本框的事件:

if (!NumericOnly(e.KeyChar)) e.Handled = true; 
1

这里是一个破解我发现。您可以隐藏的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,或使用解析和验证:

  1. 将工具箱中的组件拖动到您的窗体中。
  2. CausesValidation属性设置为true用于文本框(默认情况下为true)。
  3. 创建NumericTextBox_Validating事件处理程序并将其预订给所有应该包含十进制值的文本框。

如果不能从文本框中的文本分析十进制值,则会在文本框附近显示错误标志,并显示消息“仅允许数字值”。

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控件用于输入数字,因为它说用户“看到这个箭头我在这里只输入数字?!”。而文本框没有提到它接受的文本格式。

1

您可以创建一个“蒙面”文本框,该文本框只允许在添加到现有文本时匹配正则表达式的字符。

它的短:

首先,制定一个正则表达式是你的“编辑掩码”。对于数字,它可以像^\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地址等的文本框。

相关问题