2015-03-30 82 views
-8

我想限制我的WinForms文本框,因此它只允許輸入1到6之間的數字。沒有字母,沒有其他符號或特殊字符,只有這些數字。WinForms文本框只允許1到6之間的數字

我該怎麼做?

+0

wpf或winforms,或...? – thumbmunkeys 2015-03-30 18:22:34

+0

你應該更具體。你使用什麼框架(asp.net,winforms,wpf)? – Michael 2015-03-30 18:22:49

+1

@T-Rex我可以誠實地推薦的最好的事情是,你先嚐試一下自己的事情,然後告訴我們你做了什麼以及你在哪裏遇到問題..這並不難,但你也不應該只是坐下來等待有人給你/提供你一個解決方案 – MethodMan 2015-03-30 19:01:16

回答

0

您是否試過SupressKeyPress?

if (e.KeyCode < Keys.D1 || e.KeyCode > Keys.D6 || e.Shift || e.Alt) 
     { 
      e.SuppressKeyPress = true; 
     } 

     if (e.KeyCode == Keys.Back) 
     { 
      e.SuppressKeyPress = false; 
     } 

第二屆如果讓你可以,如果你想改變你寫什麼,按空格鍵。

0

加限制:到,並使用此:

private void txtField_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) 
      e.Handled = true; 
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) 
     e.Handled = true; 
    } 
0

如果妳使用WPF,創建你自己TextBox。如果u需要處理Numpads太然後將它們添加到切換....

public class CustomTextBox : TextBox 
    { 
     public CustomTextBox() 
     { 
      KeyDown += OnKeyDown; 
     } 

    private void OnKeyDown(object sender, KeyEventArgs keyEventArgs) 
    { 
     switch (keyEventArgs.Key) 
     { 
      case Key.D0: 
      case Key.D1: 
      case Key.D2: 
      case Key.D3: 
      case Key.D4: 
      case Key.D5: 
      case Key.D6: 
       keyEventArgs.Handled = false; 
       break; 
      default: 
       keyEventArgs.Handled = true; 
       break; 
     } 
    } 
} 
0

以下的正則表達式應該工作

Regex rgx = new Regex(@"^[1-6]+$"); 
rgx.IsMatch("1a23"); //Returns False 
rgx.IsMatch("1234"); //Returns True; 

你應該能夠與ASP.Net驗證使用和WinForms

https://msdn.microsoft.com/en-us/library/3y21t6y4(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx

請記住,我建議在提交值後進行驗證,這可能不是您想要的。對我而言,這個問題在這裏不明確。假設你使用的是ASP.Net,並且你想要限制輸入值,那麼關鍵新聞事件解決方案之前的答案應該可以工作,但他們至少需要部分回傳。如果您希望在沒有回帖的情況下進行處理,則需要客戶端腳本。

這是如何做到這一點客戶端的例子:

Restricting input to textbox: allowing only numbers and decimal point

由於示例爲任何號碼,你必須把它限制在數字1 - 6

0

這裏你有一個簡單的WebForm C#,後面的代碼會提交,它將驗證0-6之間的數字的正則表達式。

HTML

<div class="jumbotron"> 
    <h1>ASP.NET</h1> 
    <p class="lead"> 
     <asp:TextBox runat="server" ID="tbForValidation"></asp:TextBox> 
     <asp:Button runat="server" ID="btnSubmit" Text="Validate" OnClick="btnSubmit_Click" /> 
    </p> 
</div> 

後面的代碼:

protected void btnSubmit_Click(object sender, EventArgs e) 
     { 
      Regex regularExpression = new Regex(@"^[0-6]$"); 

      if (regularExpression.IsMatch(tbForValidation.Text)) 
      { 
       //Is matching 0-6 
      } 
      else 
      { 
       //Is not matching 0-6 
      } 
     } 

我也建議你發送請求到服務器之前在客戶端上運行的正則表達式驗證。這不會創建任何不必要的服務器的文本框驗證簡單的請求。

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Invalid number" ValidationExpression="^[0-6]$" ControlToValidate="tbForValidation"></asp:RegularExpressionValidator> 
+0

正則表達式@「^ [0-6] $」將只允許您輸入0-6的單個數字。正則表達式@「^ [0-6] + $」將允許您從0-6輸入許多數字。 – tdbeckett 2015-03-30 20:29:53

+0

這是正確的,它可能會讓我錯過理解這個問題。如果你想添加許多數字,你的正則表達式是正確的。 – Eldlabs 2015-03-30 20:33:53

1

你可以把這個在KeyPress事件的文本框,

private void textBox3_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    switch (e.KeyChar) 
    { 
    //allowed keys 1-6 + backspace and delete + arrowkeys 
    case (char)Keys.Back: 
    case (char)Keys.Delete: 
    case (char)Keys.D0: 
    case (char)Keys.D1: 
    case (char)Keys.D2: 
    case (char)Keys.D3: 
    case (char)Keys.D4: 
    case (char)Keys.D5: 
    case (char)Keys.D6: 
    case (char)Keys.Left: 
    case (char)Keys.Up: 
    case (char)Keys.Down: 
    case (char)Keys.Right: 
     break; 
    default: 
     e.Handled = true; 
     break; 
    } 
} 

如果按下的鍵是(數字鍵盤)1-6,退格鍵,刪除或arrowkeys允許他們。 如果它是一個不同的鑰匙不要放置它,並說它的處理。我在一個快速項目上測試了這個代碼,它允許我使用數字鍵盤1-6不知道其他數字。如果其他人不工作,只需按照允許的方式添加它們,並且方向鍵未經過測試,但只需左右移動即可。

0

我會做這樣的事情

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.D1 || e.KeyCode == Keys.D2 || e.KeyCode == Keys.D3 || e.KeyCode == Keys.D4 || e.KeyCode == Keys.D5 || e.KeyCode == Keys.D6) 
     { 
      e.Handled = true; 
     } 
    } 

也許你可以允許使用的控制按鈕以及例如退格

0

試試這個:

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    int tester = 0; 
    try 
    { 
     if (textBox1.Text != null) 
     { 
      tester = Convert.ToInt32(textBox1.Text); 
      if (tester >= 30) 
      { 
       textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1); 
       textBox1.Select(textBox1.Text.Length, 0); 
      } 
     } 
    } 
    catch (Exception) 
    { 
     if (textBox1.Text != null) 
     { 
      try 
      { 
       if (textBox1.Text != null) 
       { 
        textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1); 
        textBox1.Select(textBox1.Text.Length, 0); 
       } 
      } 
      catch (Exception) 
      { 
       textBox1.Text = null; 
      } 
     } 
    } 
} 
0

使用正則表達式@ 「^ [1-6] $」,以驗證這種類型的輸入文本中。

0

這會限制你1 - 6. 我不知道你想如何使用它。因此,我只是給你提供限制的代碼。 這是非常古老的,更像平民。

首先,我做了一個表格:

enter image description here

然後我下面的代碼添加到按鈕:

int testValue; 
// only numbers will drop into this block 
if(int.TryParse(textBox1.Text, out testValue)){ 
// hard coded test for your desired values 
    if(testValue == 1 || testValue == 2 || testValue == 3 || testValue == 4 || testValue == 5 || testValue == 6){ 
     // this is here just to give us proof of the return 
     textBox1.Text = "Yep, 1 - 6"; 
    } 
    else{ 
     // you can throw an exception here, popup a message, or populate as I did here. 
     // this is here just to give us proof of the return 
     textBox1.Text = "Nope, not 1 - 6"; 
     } 
    } 
    // you can throw an exception here, popup a message, or populate as I did here. 
else{ 
    textBox1.Text = "Not a number"; 
} 

如果輸入任何非數字的文本框顯示「沒有一個數」。

1 - 6會顯示「是,1 - 6」。

任何數字<或> 1-6將閱讀「不是,1 - 6」。

祝你好運!