Ограничить ввод только числами в текстовом поле? (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;
}
}
}