コントロールにアクセスせずに、「エラー プロバイダー」を介して現在表示されているすべてのエラーを列挙することは可能ですか?
4 に答える
親のControlsコレクションを列挙し、それぞれでGetErrorを呼び出すことにより、ErrorProviderからすべてのエラーを取得できます。効率的ではありませんが、機能します。
foreach (Control ctrl in errProv.ContainerControl.Controls)
{
Console.WriteLine(errProv.GetError(ctrl));
}
グーグルなどでこれを見つけた.net WinFormsの人々のために...
WinForms では、すべてのコントロールにアクセスせずに「エラー プロバイダー」クラスを介して表示されているすべての現在のエラーを少なくとも列挙することはできません。WinForms には要約バリデータさえありません。
ただし、エラーが下位層から発生している場合は、ポスターの Charles Graham が指摘しているように、どこかでそれらのコレクションにアクセスできる必要があります。
WinForms では、アプリケーションが十分に定義された「レイヤー」を持たないほど単純な場合、現在のすべてのエラーを記録して公開するクラスで ErrorProvider をラップできます。または、アプリが非常に単純な場合は、エラーを記録/削除し、ErrorProvider を更新するヘルパー メソッドを作成します。
すべてのエラーを表示するサマリー バリデーターがありますが、かなり醜く、ページに表示せずに使用できるかどうかはわかりません。技術的には、「正しい方法」で物事を行っている場合、すべてのエラー処理を中間層で処理してから、そのように画面にバブリングする必要があるため、コレクションまたはディクショナリ内のすべてのエラーに既にアクセスできます。