仅限文本框中的数字输入? (C#)

时间:2013-06-01 09:14:52

标签: c# textbox numbers limiting

请原谅我提出这个问题,我已经查看了与此相关的各种不同问题,但仍然无法实现。

使用我看到的答案,我收集了这些,并将此编码应用到我的文本框中。

private void TxtBox5_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!(Char.IsDigit(e.KeyChar) || (e.KeyChar == (char)Keys.Back)))
            e.Handled = true;
    }

现在,当我继续运行程序时,我仍然能够输入字母。我不知道下一步该做什么,所以任何解决方案都会很棒。感谢。

5 个答案:

答案 0 :(得分:8)

好的,这就是我刚刚制作的,它100%正常测试它。注意我的textBox名为serialTxtBox,你可以把它改成你的。

void serialTxtBox_TextChanged(object sender, EventArgs e)
        {
            bool enteredLetter = false;
            Queue<char> text = new Queue<char>();
            foreach (var ch in this.serialTxtBox.Text)
            {
                if (char.IsDigit(ch))
                {
                    text.Enqueue(ch);
                }
                else
                {
                    enteredLetter = true;
                }
            }

            if (enteredLetter)
            {
                StringBuilder sb = new StringBuilder();
                while (text.Count > 0)
                {
                    sb.Append(text.Dequeue());
                }                

                this.serialTxtBox.Text = sb.ToString();
                this.serialTxtBox.SelectionStart = this.serialTxtBox.Text.Length;
            }
        }
编辑:你肯定做错了什么。在您的表单构造函数中,其名称类似于您的表单。在我的情况下,您需要初始化事件SerialGenerator。就我而言:

public SerialGenerator()
        {
            InitializeComponent();
            this.serialTxtBox.TextChanged += serialTxtBox_TextChanged;
        }

每当有人在你的textBox中输入内容时,这将触发该方法。确保将其重命名为文本框的名称

答案 1 :(得分:1)

你可以试试这个:

private void TxtBox5_KeyPress(object sender, KeyPressEventArgs e)
{
    if(!(Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar)))
        { e.Handled = true; }
}

我认为这不是最好的,但我猜你可以通过调整一点来完成这项工作。我现在没有VS检查什么会起作用。

编辑:我的坏。我认为你可以使用上面的那个而不是按键,但是文本框的textchanged事件。这更像是调整而非解决方案。如果您遇到困难并且没有得到更好的解决方案,只是为了让您取得进步。

更新:更新了代码。请检查一下这个是否有帮助。

答案 2 :(得分:0)

试试这个,希望这个有用

   private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        int asciiCode = Convert.ToInt32(e.KeyChar);
        if ((asciiCode >= 48 && asciiCode <= 57))
        {


        }
        else
       {                MessageBox.Show("Not allowed!");
            e.Handled = true;


        }
    }

答案 3 :(得分:0)

我在代码级别添加了事件,因为代码中可能没有正确的事件添加到控件中。

注意:非字符键不会引发KeyPress事件 您需要同时使用KeyDownKeyPress个事件

public partial class Form1 : Form
{
    private bool nonNumberEntered = false;
    public Form1()
    {
        InitializeComponent();
        textBox1.KeyDown+=new KeyEventHandler(textBox1_KeyDown);
        textBox1.KeyPress+=new KeyPressEventHandler(textBox1_KeyPress);
    }

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (nonNumberEntered == true)
        {
            e.Handled = true;
        }
    }

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        nonNumberEntered = false;

        if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
        {
            if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
            {
                if (e.KeyCode != Keys.Back)
                {
                    nonNumberEntered = true;
                }
            }
        }
        if (Control.ModifierKeys == Keys.Shift)
        {
            nonNumberEntered = true;
        }
    }
}

参考:Control.KeyPress Event

答案 4 :(得分:0)

试试这个......

private void TxtBox5_KeyPress(object sender, KeyPressEventArgs e)
    {         
        int num = 0;
         e.Handled = !int.TryParse(e.KeyChar.ToString(), out num);

    }