【发布时间】:2016-12-11 09:18:56
【问题描述】:
我有一个包含 TabControl 和 ErrorProvider 的表单。其中一个选项卡有几个文本框和一个按钮。如果内容无效,则文本框使用 Validating 事件来设置错误()。按下按钮时,将运行:
bool ok = true;
foreach (Control c in errorProviderDv.ContainerControl.Controls)
{
MessageBox.Show(c.Name);
if (errorProviderDv.GetError(c) != "")
{
ok = false;
}
}
TabControl 是 errorProviderDv.ContainerControl.Controls 中的唯一控件,即使设置了多个错误并在表单中显示。
我做错了吗? ErrorProvider 是否需要成为选项卡而不是表单的子项?
【问题讨论】:
-
您不能将
TabControl或TabPage指定为ContainerControl或ErrorProvider。你有什么要求?您想知道整个Form的验证状态还是只知道TabControl的特定TabPage的验证状态? -
我一次只看一个 TabPage。我为每个 TabPage 设置了不同的 ErrorProvider。
-
您不需要使用多个
ErrorProvider组件。其中一个就足够了整个表格。无论如何,如果您想检查这些控件,可以将 foreach 更改为查看(Control c in Control c in tabControl1.TabPages[0].Controls)。 -
也看看这篇文章,你可能会发现它很有用:Validating user input / Give .NET controls status OK or NOK
-
控件层次结构是一个树,而不是一个数组或集合。树总是最好用递归遍历,使用
c.Controls。或者考虑this approach。
标签: c# winforms visual-studio error-handling