请原谅我提出这个问题,我已经查看了与此相关的各种不同问题,但仍然无法实现。
使用我看到的答案,我收集了这些,并将此编码应用到我的文本框中。
private void TxtBox5_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(Char.IsDigit(e.KeyChar) || (e.KeyChar == (char)Keys.Back)))
e.Handled = true;
}
现在,当我继续运行程序时,我仍然能够输入字母。我不知道下一步该做什么,所以任何解决方案都会很棒。感谢。
答案 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事件
您需要同时使用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;
}
}
}
答案 4 :(得分:0)
试试这个......
private void TxtBox5_KeyPress(object sender, KeyPressEventArgs e)
{
int num = 0;
e.Handled = !int.TryParse(e.KeyChar.ToString(), out num);
}