Messagebox出现两次,使用退格键清空文本框会出错

时间:2018-05-08 17:21:14

标签: c# visual-studio

感谢您抽出时间阅读本文。

我的问题是如果我使用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);

获得System.FormatException错误

ALSO

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

1 个答案:

答案 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控件?