消息框出现两次,使用退格符清空文本框会出现错误



感谢您花时间阅读本文。

我的问题是,如果我使用消息框显示 2 次的texbox.Clear();

这是我的代码:

private void textBox3_TextChanged(object sender, EventArgs e)
{
int val = 0;
bool res = Int32.TryParse(textBox3.Text, out val);
if (res == true && val > -1 && val < 101)
{
// add record
}
else
{
textBox3.Clear();
MessageBox.Show("Please input 0 to 100 only.");
return;
}
} 

如果我使用这个:

if (textBox3.Text == "")
{
MessageBox.Show("Vul aub iets in", "Lege invoer",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}

然后我会得到一个系统.格式异常错误使用此straal = int.Parse(textBox3.Text);

当我在文本框中输入一个数字并输入退格键时,警报会出现。

你的问题是textBox3.Clear(). 如果有文本,则会再次触发TextChanged事件。

我建议你使用验证事件而不是文本更改事件。这样,在用户退出文本框并更改事件处理程序中的值之前,您不会检查该值,而不会再次触发该事件

*更正 - 我应该说"验证事件"。

假设您知道如何将事件处理程序分配给特定事件,则可以使用相同的代码进行一些小的更改。 这样的事情应该有效:

private void textBox3_Validating(object sender, CancelEventArgs e)
{
int val = 0;
bool res = Int32.TryParse(textBox3.Text, out val);
if (res == true && val > -1 && val < 101)
{
// add record
e.Cancel = false;
}
else
{
textBox3.Clear();
e.Cancel = true;
MessageBox.Show("Please input 0 to 100 only.");
}
}

如果需要有关分配事件处理程序的帮助,可以通过在事件列表的属性网格中找到正确的事件并双击它来轻松分配处理程序并创建代码存根。 只需将此方法的内容复制到新方法中即可。

看起来您正在直接修改生成的代码。 这不是一个好主意。 使用上面描述的方法添加新的事件处理程序。

若要删除现有方法,请在事件列表中擦除与该事件一起保存的方法名称,然后根据需要删除代码本身。

若要摆脱事件处理程序的额外触发,请将文本框重置为默认的可接受值 (textBox3.Text = "0"(,而不是清除它。

附带说明一下。 您是否考虑过改用 NumericUpDown 控件?

最新更新