【问题标题】:Winforms Using an ErrorProviderWinforms 使用 ErrorProvider
【发布时间】:2013-12-11 15:43:21
【问题描述】:

我正在使用带有如下代码的 ErrorProvider:

private void textBoxLocation_Validating(object sender, CancelEventArgs e)
{
  if (!ValidateLocation())
  {
    e.Cancel = true;
  }
}

这个特定的文本框是为了让用户输入特定的路径,方法是直接将其键入文本框,或者按“浏览”按钮打开文件对话框,然后将路径复制到文本框。

问题是当用户直接在未验证的文本框中键入内容时,e.Cancel = true; 被调用,这使得文本框不会失去焦点,但是我什至无法按下浏览按钮来选择一条路径。不仅如此,我什至无法关闭程序。 如何解决这个问题?

【问题讨论】:

  • 避免在验证事件中这样做。将其移至您的 accept 数据方法(以取消关闭)并在键入期间“即时”执行(处理 TextChanged 或...使用 Application.Idle)。
  • 那么,不要设置 e.Cancel = true 。并实际使用 ErrorProvider 以便用户知道数据输入无效。

标签: c# winforms validation errorprovider


【解决方案1】:

大概您将ErrorProvider 的文本设置在ValidateLocation 中。在这种情况下,您真的不想在这里使用e.Cancel,因为它的本意是完全按照它正在做的事情。 防止控件失去焦点。

这在输入错误的情况下是有意义的。

所以,简而言之,你在这里使用e.Cancel 是没有意义的。

【讨论】:

  • 但在那种情况下,我看不出任何有意义的情况。什么时候做一些阻止用户关闭程序的事情才有意义?
  • @YonatanNir,目的是防止用户离开控件。想象一下,如果用户在邮政编码文本框中输入了无效的邮政编码;您希望用户在继续之前清除文本框或输入有效的文本框。
  • 我明白这一点,但是如果用户没有该信息并且他想去获取它并在明天返回它怎么办?他是否必须让程序开放一天?
  • @YonatanNir,或者关闭它,我猜明天再来。
  • 但这就是我写的,如果文本框没有失去焦点,用户就不能关闭程序。
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多