2009-12-20 82 views
2

我想限制文本框只接受C#中的数字。我怎么做?将文本框输入限制在C#中的数字#

+15

HTML? Windows窗体? WPF? Silverlight的? – 2009-12-20 08:14:33

+0

如果C#相关,也许可能是一个愚蠢的建议,但评估NumericUpDown控件是否合适。 – TechNyquist 2015-09-07 08:29:41

回答

1

您是否在WinForms中尝试过MaskedTextBox控件?

13

最粗下来,这样做是做这样的事情的肮脏的方式:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress); 
    } 

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     e.Handled = !char.IsDigit(e.KeyChar); 
    } 

} 

你还是无法与安全这种方法,因为用户仍然可以将非数字字符复制并粘贴到文本框中。无论如何,您仍然需要验证您的数据。

+5

用户也不能删除字符。 – 2010-06-28 13:28:58

+0

@LucasB,除非他们削减。 :) – 2013-02-07 21:14:10

+0

这很好,我推荐的唯一改变是启用Backspace字符: – 2013-05-02 19:36:10

0

您可以使用AJAX Control Toolkit的FilterTextBox。使用这个你可以允许/禁止任何字符类型。这非常灵活。

+0

为什么要采用外部工具,对于可以用内建工具完成的事情? – 2009-12-20 08:49:07

+0

如果他在这里谈论Web,那么只需在一个普通的TextBox中创建一个JavaScript函数,以便它只能输入数字。当然,现在回顾一下在服务器端进行检查。对于客户端永远不会安全。由于您可以使用相同的标题发送请求。我没有看到在这里使用ajax的优势... – sv88erik 2009-12-20 09:40:18

+0

优点是只需在页面上放置一个控件并将其忘掉即可,尤其是如果您已经使用了Ajax Control Toolkit。 – paulH 2013-03-15 12:45:18

4

从别人在我之前已经说过,我们几乎知道你会在使用这个东西,的WinForms,ASP.NET,Silverlight的...

但现在我需要一个机会,这是WinForm的:)

private void TxtBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "\\d+")) 
      e.Handled = true; 
} 
+0

这不允许退格 – 2012-06-26 22:27:41

+0

也不是这里所问的。但如果你需要它..如果(e.KeyChar = vbKeyBack){return;} – sv88erik 2012-08-07 11:51:51

0

您可以使用Microsoft.VisualBasic.Information.IsNumeric是数字函数。只需添加引用Microsoft.VisualBasic程序

private void textBox1_Validating(object sender, 
     System.ComponentModel.CancelEventArgs e) { 
    if (!Microsoft.VisualBasic.Information.IsNumeric(textBox1.Text)) { 
     e.Cancel = true; 
    } else { 
     // Do something here 
    } 
} 

这允许用户输入科学计数法是不平凡的筛选。

0

不知道这是正确的做法,但它为我工作,在TextChanged事件的TextBox运行它:

private void CoordinateValidation(object sender, TextChangedEventArgs e) { 
     TextBox inputBox = e.OriginalSource as TextBox; 
     inputBox.TextChanged -= CoordinateValidation; 
     int caretPos = inputBox.CaretIndex; 
     foreach (TextChange change in e.Changes) { 
      if (inputBox.Text.Substring(change.Offset, change.AddedLength).Any(c => !ValidChars.Contains(c)) || 
       inputBox.Text.Count(c => c == '.') > 1 || 
       (inputBox.Text.Length > 0 && inputBox.Text.Substring(1).Contains('-'))) { 
       inputBox.Text = inputBox.Text.Remove(change.Offset, change.AddedLength); 
       caretPos -= change.AddedLength; 
      } 
     } 
     inputBox.CaretIndex = caretPos; 
     inputBox.TextChanged += CoordinateValidation; 
    } 
1

这可能不是最好的办法,但对WPF的TextBox工作正常。 ..

private void textBox1_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     string originalText = ((TextBox)sender).Text.Trim(); 
     if (originalText.Length>0) 
     { 
      int inputOffset = e.Changes.ElementAt(0).Offset; 
      char inputChar = originalText.ElementAt(inputOffset); 
      if (!char.IsDigit(inputChar)) 
      { 
       ((TextBox)sender).Text = originalText.Remove(inputOffset, 1); 
      } 
     } 
    } 
2

有一些错误,但简单的方法:d

private void textbox1_TextChanged(object sender, EventArgs e) 
     { 
      char[] originalText = textbox1.Text.ToCharArray(); 
      foreach (char c in originalText) 
      { 
       if (!(Char.IsNumber(c))) 
       { 
        textbox1.Text = textbox1.Text.Remove(textbox1.Text.IndexOf(c)); 
        lblError.Visible = true; 
       } 
       else 
        lblError.Visible = false; 
      } 
      textbox1.Select(textbox1.Text.Length, 0); 
     } 
0

看一看下面的代码

private void txtbox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     const char Delete = (char)8; 
     e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete; 
    } 

这将是有益的,但用户可以复制和粘贴文字:-)