仅在文本框中输入数字?(c#)

仅在文本框中输入数字?(c#),c#,textbox,numbers,limiting,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;

请原谅我提出这一问题,我已经研究了与此相关的各种不同问题,但我仍然无法实施

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

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

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

试试这个,希望能奏效

   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;


        }
    }
private void textBox1\u按键(对象发送器,按键事件参数e)
{
int ascicode=Convert.ToInt32(e.KeyChar);
如果((ASCICODE>=48&&ASCICODE您可以尝试以下方法:

private void TxtBox5_KeyPress(object sender, KeyPressEventArgs e)
{
    if(!(Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar)))
        { e.Handled = true; }
}
我不认为这是最好的一个,但你可以通过调整一点来实现这一点,我想。我现在没有VS来检查什么是可行的

编辑:我的错。我认为你可以在文本框的文本更改事件中使用上面的一个,而不是按键。这更像是一个调整,而不是一个解决方案。如果你陷入困境,没有更好的解决方案,只是为了让你进步


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

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

注意:按键事件不是由非字符键引发的 您需要同时使用
KeyDown
KeyPress
事件

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;
        }
    }
}
公共部分类表单1:表单
{
私有bool nonnumberrentered=假;
公共表格1()
{
初始化组件();
textBox1.KeyDown+=新的KeyEventHandler(textBox1\u KeyDown);
textBox1.KeyPress+=新的KeyPressEventHandler(textBox1\u KeyPress);
}
私有无效文本框1\u按键(对象发送器,按键事件参数e)
{
if(非numberEntered==true)
{
e、 已处理=正确;
}
}
私有void textBox1\u KeyDown(对象发送方,KeyEventArgs e)
{
非numberrentered=false;
如果(e.KeyCodeKeys.D9)
{
if(e.KeyCodeKeys.NumPad9)
{
if(e.KeyCode!=Keys.Back)
{
非numberrentered=真;
}
}
}
if(Control.ModifierKeys==Keys.Shift)
{
非numberrentered=真;
}
}
}
参考:

试试这个

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

    }

好的,这是我刚才做的,它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;
            }
        }


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

首先:在调试器中逐步执行代码,并确保调用例程。如果这是windows窗体应用程序,为什么不使用仅允许数字的NumericUpDown控件。是否有特殊原因导致您正在使用文本框?将输入限制为数字的最简单方法是使用numericUpDown而不是textbox。如果确实需要文本框,您可以创建一个包含所有数字(可能还有小数点)的字符串或列表然后检查您输入的字符串是否包含任何其他字符MSDN documenation有一个示例。@Coder,我使用文本框是因为它看起来比NumericUpDown更干净。运气不好,也不起作用。这会发出错误,有一些“无效参数”调试时仍然没有结果。我在我的系统上签出了它,似乎工作正常。您能否尝试在表单中使用单个文本框创建一个新的Win Forms项目并进行测试。我认为可能是其他原因导致了此问题。启动了一个新项目,添加了文本框,添加了代码,我仍然可以输入数字。这是重新设置的现在是奇数。但您只想输入数字,对吗?我如何引用控件。按键?
textBox1.keypress+=给定事件
,或者您可以在设计器视图中的控件->属性->事件中执行此操作。我现在收到一个“nonNumberEntered”错误在当前上下文中不存在。您需要添加
nonNumberEntered
标志,如示例代码中所示。我该怎么做?我已经看过了,但无法解决它(很抱歉,问题不好,真的刚刚开始)运气不好,有很多错误。@Fadzitt:它变了。仍然可以输入字母,开始认为我没有在自己的页面上添加内容。我应该在公共表单1()中添加任何内容吗我仍然可以输入字母,我做错了。您是否可以通过teamviewer或类似的方式来帮助我?而且我们已经成功了,我真的非常感谢您。很抱歉,我不是最有帮助的人,但我们都从某个地方开始。没问题,您也可以投票,谢谢您的选择:)glI必须有15名代表才能投票,但请相信我,一旦成功,我就尝试投票。如果要在开头的var textBox=(textBox)sender上写,那么textBox的名称就无关紧要了。
public SerialGenerator()
        {
            InitializeComponent();
            this.serialTxtBox.TextChanged += serialTxtBox_TextChanged;
        }