Windows窗体错误提供程序不显示在自定义选项卡控件中

时间:2012-10-16 23:38:42

标签: tabcontrol windows-forms-designer errorprovider

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

我的向导控件是UserControl。它包含我从TabControl派生的自定义选项卡控件,以便我可以隐藏选项卡并忽略使用按键在选项卡之间导航的尝试,以及控件底部的通常的Back / Next / Finish / Cancel按钮集合。

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

所以看起来一切正常。

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

我注意到如果按下按钮而没有松开鼠标按钮,图标就会正确显示。虽然发生了验证错误,但容器外部的按钮似乎会出现焦点事件(通常您无法离开活动控件)。

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

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

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