C# WinForms文本框只允许1到6之间的数字

C# WinForms文本框只允许1到6之间的数字,c#,winforms,textbox,C#,Winforms,Textbox,我想限制我的WinForms文本框,使其只允许输入1到6之间的数字。没有字母,没有其他符号或特殊字符,只有那些数字 如何做到这一点?将限制:0添加到6,并使用以下选项: private void txtField_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar !=

我想限制我的WinForms文本框,使其只允许输入1到6之间的数字。没有字母,没有其他符号或特殊字符,只有那些数字


如何做到这一点?

将限制:0添加到6,并使用以下选项:

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

如果您使用WPF,请创建自己的
TextBox
。如果你也需要处理numpad,那么将它们添加到开关中

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

下面的正则表达式应该可以工作

Regex rgx = new Regex(@"^[1-6]+$");
rgx.IsMatch("1a23"); //Returns False
rgx.IsMatch("1234"); //Returns True;
您应该能够将它与ASP.Net验证和WinForms一起使用

请记住,我建议在提交值后进行验证,这可能不是您想要的。对我来说,这个问题在这里是模棱两可的。假设您使用的是ASP.Net,并且希望限制键入值,则按键事件解决方案优先答案应该可以工作,但它们至少需要部分回发。如果您希望在没有回发的情况下处理此操作,则需要客户端脚本

这是一个如何在客户端执行此操作的示例:


由于该示例适用于任何数字,您必须将其限制为数字1-6。

这里有一个简单的网络表单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>
我还建议您在向服务器发送请求之前在客户端运行正则表达式验证。这不会向服务器创建任何不必要的请求,以便在textbox上进行简单验证

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

您试过SupersKeyPress吗

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

        if (e.KeyCode == Keys.Back)
        {
            e.SuppressKeyPress = false;
        }
if(e.KeyCodeKeys.D6 | | e.Shift | e.Alt)
{
e、 SuppressKeyPress=true;
}
if(e.KeyCode==Keys.Back)
{
e、 SuppressKeyPress=假;
}

如果您想更改所写内容,第二个If可以按backspace键。

您可以将其置于文本框的
按键事件中

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,则可以使用退格键、删除键或箭头键。
如果它是一个不同的关键点,不要放置它,并说它的处理。我在一个快速的项目中测试了这段代码,它允许我使用numpad 1-6放置,其他数字我不知道。如果其他键不起作用,您只需在允许的情况下添加它们,并且箭头键未经测试,但它们只需左右移动即可。

我会这样做

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;
        }
    }
您也可以允许使用控制按钮,例如退格,尝试以下操作:

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

使用regex@“^[1-6]$”在文本框中验证此类型的输入。

这会将您的输入限制为1-6。
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Invalid number" ValidationExpression="^[0-6]$" ControlToValidate="tbForValidation"></asp:RegularExpressionValidator>
我不知道你想怎么用它。 因此,我只是给你一些代码来提供限制。 这是非常古老的,更像是平民

首先,我做了一个表格:

然后,我在按钮中添加了以下代码:

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”


祝你好运

wpf或winforms,或者…?您应该更具体一些。您使用的是什么框架(asp.net、winforms、wpf)?@T-Rex我真诚地建议您首先自己尝试一些东西。。然后向我们展示您所做的工作以及存在的问题。。这并不难,但你也不应该只是坐着等别人给你/给你提供解决方案。我使用winforms抱歉,忘了添加这一点@MethodMan我尝试了许多不同的解决方案,但没有一个有效。regex@“^[0-6]$”只允许您输入一位数字0-6。regex@“^[0-6]+$”将允许您输入0-6之间的许多数字。这是正确的,可能会使我无法理解问题。如果要添加多个数字,则正则表达式是正确的。