2

我正在尝试在 Windows 窗体中构建向导框架。我已经设法从这个网站和其他网站收集了很多有用的技巧,这些技巧让我非常接近成功。但是,我在向导第一页以外的任何选项卡页上显示 ErrorProvider 时遇到问题。

我的向导控件是一个用户控件。它包含一个我从 TabControl 派生的自定义选项卡控件,以便我可以隐藏选项卡并忽略使用按键在选项卡之间导航的尝试,以及控件底部通常的返回/下一步/完成/取消按钮集合。

当我点击下一步按钮时,我使用反射允许我在属于向导控件的特定 TabPage 上引发验证事件。(我不想验证整个 TabControl,只验证当前活动页面。)当我这样做时,我在调试器中看到我的当前选项卡页面上控件的验证例程被正确调用,我看到我'我调用了我附加到特定控件(在本例中为 TextBox)的 ErrorProvider,并带有有效的错误消息。我在验证例程中将 CancelEventArgs 的 Cancel 设置为 true,并由使用反射机制的代码拾取,以便我看到我失败并且不更改选项卡。我成功地将焦点设置在验证失败的控件上。

因此,所有这些似乎都工作得很好。

不幸的是,除非我在第一个标签页上,否则我看不到 ErrorProvider 令人愉快的闪烁图标对于所有其他标签页,根本看不到任何消息。

我很困惑。有什么想法吗?如果有帮助,我可以提供代码片段。

谢谢!

4

1 回答 1

0

我假设在您的情况下,移动到向导下一步的按钮位于外部(下方)TabControl

我注意到如果我在不释放鼠标按钮的情况下按下按钮,图标会正确显示。尽管发生了验证错误,但容器外部的按钮似乎获得了焦点事件(通常您将无法离开活动控件)。

我通过为按钮MouseUp事件注册一个事件处理程序以“重新聚焦”来解决这个问题TabControl

private void cmdOK_MouseUp(object sender, MouseEventArgs e)
{
    tabControl1.Focus();
}

注意:您还需要将表单ActiveControl属性设置为验证失败的控件之一。

于 2017-05-19T10:59:38.413 回答