2009-12-20 105 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; 
    } 

這將是有益的,但用戶可以複製和粘貼文字:-)

相關問題