感谢您抽出时间阅读本文。
我的问题是如果我使用texbox.Clear();
消息框显示2次。
这是我的代码:
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);
ALSO
当我在文本框中并输入一个数字并输入退格时,警报就会出现。
答案 0 :(得分:0)
您的问题是textBox3.Clear()
。如果有文本,则会再次触发TextChanged
事件。
我建议您使用Validate事件而不是TextChanged事件。这样,在用户退出文本框并更改事件处理程序中的值之前,您不会检查该值,不会再次触发该事件
*更正 - 我应该说&#34;验证事件&#34;。
假设您知道如何为特定事件分配事件处理程序,则可以使用相同的代码进行一些小的更改。这样的事情应该有效:
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控件?