我正在尝试验证文本框的空值。如果文本框为空并失去焦点,则必须显示错误,文本框必须再次获得焦点。
读到这个我遇到了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'
我该如何解决这个问题?
答案 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!!");
}
}