Windowsフォームには、いくつかのコントロールとUserControlがあります。UserControlにErrorProviderがあります。userControlにエラーがある場合、フォーム内のすべてのコントロールの編集を停止したいと思います。それを行う方法はありますか?
errorProvider.BindToCustomDataAndErrors(..)を使用しています
Windowsフォームには、いくつかのコントロールとUserControlがあります。UserControlにErrorProviderがあります。userControlにエラーがある場合、フォーム内のすべてのコントロールの編集を停止したいと思います。それを行う方法はありますか?
errorProvider.BindToCustomDataAndErrors(..)を使用しています
Validatingイベントを使用して、ユーザーがユーザーコントロールからフォーカスを移動できないようにすることができます。例えば:
protected override void OnValidating(CancelEventArgs e) {
foreach (Control ctl in this.Controls) {
if (errorProvider1.GetError(ctl) != "") e.Cancel = true;
}
base.OnValidating(e);
}
このようにErrorProvider.GetError()を使用することは、機能する可能性はありますが、理想的ではありません。検証エラーの独自のリストを保持することをお勧めします。
ユーザー コントロールのプロパティを公開して、エラーがあるかどうかを示します (コントロール コレクションを反復してチェックするなど)。errorProvider.GetError(control)
プロパティを確認し、必要なものをすべて無効にします
if (!myUserControl.IsValid) { someContainerControl.Enabled = false; }
「リアルタイム」で通知する必要がある場合は、ユーザー コントロール IsValidChanged でイベントを宣言し、それにアタッチして、それが起動し、IsValid が false のときにコントロールを無効にします。