验证输入空文本框c#

时间:2014-01-10 08:50:46

标签: c# winforms

我正在尝试验证文本框的空值。如果文本框为空并失去焦点,则必须显示错误,文本框必须再次获得焦点。

读到这个我遇到了Validating事件,可以通过e.Cancel取消。但是,当我尝试这样做时,我收到一条错误消息。

我的代码:

private void CheckInput(CancelEventArgs e, TextBox tb)
{
   ErrorProvider error = new ErrorProvider();
   if (!string.IsNullOrEmpty(tb.Text))
   {
      error.SetError(tb, "*");
      e.Cancel = true;
   }

   else
   {
      error.SetError(tb, "");
   }
}

private void tbTitel_Validated(object sender, CancelEventArgs e)
{
    CheckInput(e, tbTitel);

}

我得到的错误如下:

错误1'tbTitel_Validated'没有重载匹配委托'System.EventHandler'

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

验证使用此委托:

private void tbTitel_Validating(object sender, CancelEventArgs e)
{
}

经过验证的事件使用此:

private void tbTitel_Validated(object sender, EventArgs e)
{
}  

您想要使用 Validating 事件(您应该将eventhandler链接到验证事件,而不是验证的事件。这样您就可以取消它

您可能先点击了验证,然后将事件处理程序名称复制/粘贴/选中到已验证的事件中。 (设计者)

答案 1 :(得分:1)

您应该使用Validating事件来执行检查,而不是Validated事件。

这两个事件有不同的签名。 Validated事件接收简单的EventArgs参数,而Validating事件接收可用于恢复焦点切换的CancelEventArgs参数。

说,看来你的逻辑错了。

// error if string is null or empty
// if (!string.IsNullOrEmpty(tb.Text))
if (string.IsNullOrEmpty(tb.Text))
{
   error.SetError(tb, "*");
   e.Cancel = true;
}
else
{
   error.SetError(tb, "");
}

答案 2 :(得分:1)

发生错误,因为tbTitel_Validated在其签名中没有CancelEventArgs

请查看此主题以获取更多信息: No overload for 'method' matches delegate 'System.EventHandler'

结论:改为使用tbTitel_Validating

答案 3 :(得分:0)

始终在Object.Validated事件处理程序

中使用验证语句

同样地:


 private void textBox1_Validated(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox1.Text) || textBox1.Text == "")
            {
                MessageBox.Show("Please use valid data input!!");
            }
        }