2012-10-16 47 views
2

我试图在Windows窗体中构建向导框架。我设法从这个和其他网站收集了很多有用的提示,这些提示让我非常接近成功。但是,在向导的第一个页面以外的任何标签页上显示ErrorProvider时遇到问题。Windows窗体错误提供程序不显示在自定义选项卡控件中

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

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

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

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

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

谢谢!

回答

0

我假定在你的情况下移动到向导的下一个步骤中的按钮被置于(下图)TabControl

我注意到,如果我按下按钮而不释放图标显示正确鼠标按钮。看起来容器外面的按钮在发生验证错误时会聚焦事件(通常您无法离开活动控件)。

我工作围绕这一问题通过注册的事件处理程序的按钮MouseUp事件“重新调整”的TabControl

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

注:你还需要设置你的形式ActiveControl财产的一个控制验证失败。

相关问题