0

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

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

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

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

4

5 回答 5

8

好的,这就是我刚才所做的,它 100% 工作,刚刚测试过。注意我的文本框被命名为 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;
        }

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

于 2013-06-01T10:24:09.983 回答
1

你可以试试这个:

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

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

编辑:我的错。我认为您可以在文本框的 textchanged 事件上而不是在按键上使用上述一个。这更像是一个调整而不是一个解决方案。只是为了让你进步,如果你被卡住并且没有得到更好的解决方案。

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

于 2013-06-01T09:32:09.993 回答
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;


        }
    }
于 2013-06-01T09:22:12.443 回答
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;
        }
    }
}

REF : Control.KeyPress 事件

于 2013-06-01T09:41:40.097 回答
0

试试这个 ...

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

    }
于 2013-06-01T09:48:12.403 回答