Ограничить ввод только числами в текстовом поле? (C#)

Пожалуйста, извините за то, что спрашиваю об этом, я рассмотрел различные вопросы, связанные с этим, и я до сих пор не могу заставить его реализовать

Используя ответы, которые я посмотрел, я собрал это и применил эту кодировку к своему текстовому полю.

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

Теперь, когда я продолжаю запускать программу, я все еще могу вводить в нее буквы. Я не знаю, что делать дальше, поэтому любое решение будет отличным. Благодарю.

5 ответов

Решение

Хорошо, это то, что я сделал только сейчас, он работает на 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;
        }

это будет запускать метод каждый раз, когда кто-то вводит что-то в ваш текстовый ящик. Убедитесь, что вы переименовали его в имя вашего текстового поля

Вы можете попробовать это:

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

Я не думаю, что это лучший, но вы можете сделать эту работу, немного подправив, я думаю. У меня нет VS сейчас, чтобы проверить, что будет работать.

РЕДАКТИРОВАТЬ: мой плохой. Я думаю, что вы можете использовать вышеупомянутое не по нажатию клавиши, а по событию textaged текстового поля Это больше похоже на настройку, чем решение. Просто чтобы продвинуться вперед, если вы застряли и не нашли лучшего решения.

Обновление: обновлен код. Пожалуйста, проверьте, поможет ли это вам.

Попробуй это...

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

    }

Попробуйте это, надеюсь, это работает

   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;


        }
    }

Я добавил события на уровне кода, так как в вашем коде может быть возможность некорректно добавить событие в элемент управления.

Примечание. Событие KeyPress не вызывается не символьными клавишами, которые необходимо использовать как 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;
        }
    }
}

REF: Control.KeyPress Event

Другие вопросы по тегам