2015-03-30 5 views
-8

Я хочу ограничить текстовое поле WinForms, чтобы оно позволяло вводить числа от 1 до 6. Никаких букв, никаких других символов или специальных символов, только эти числа.WinForms Текстовое поле допускает только номера от 1 до 6

Как это сделать?

+0

wpf или winforms, или ...? – thumbmunkeys

+0

Вы должны быть более конкретными. Какие рамки вы используете (asp.net, winforms, wpf)? – Michael

+1

@ T-Rex лучшее, что я могу честно порекомендовать, это то, что вы сначала попробуете что-то свое ... затем покажите нам, что вы сделали, и где у вас возникли проблемы .. это не так сложно, но вы также не должны просто сидеть и ждать, пока кто-то даст вам/предоставит вам решение – MethodMan

ответ

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; 
     } 

2 Если у вас есть возможность нажимать назад, если вы хотите изменить то, что вы написали.

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. Если и нужно обрабатывать 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 Validations и 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# с кодом позади на submit, который будет проверять регулярное выражение для чисел между 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 
      } 
     } 

Я также хотел бы предложить, что вы запускаете проверку RegEx на стороне клиента перед отправкой запроса на сервер. Это не создаст ненужного запроса на сервер для простой проверки в текстовом поле.

<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

+0

Это правильно, это может быть так, что я пропущу понимание вопроса. Ваше регулярное выражение является правильным, если вы хотите добавить много цифр. – Eldlabs

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; 
    } 
} 

Если нажата клавиша (Numpad) 1-6, забой, удалять или arrowkeys позволяют им. Если это отличный ключ, не размещайте его и не говорите, что он обрабатывается. Я протестировал этот код на быстрый проект, который позволил мне разместить с помощью numpad 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; 
     } 
    } 

Вы можете, возможно, разрешить использование кнопок управления, а также, например, Backspace

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».

Удачи вам!

Смежные вопросы