フォームが読み込まれたときにフォーカスを取得するカスタムコントロールがあります。空のままにするか、無効なデータが入力された場合に処理する検証イベントを使用します。
私の問題は、ユーザーがフォームをロードしてから閉じると、検証プロセスが実行され、空のままであるためエラーが表示されることです。
BaseForm(:Form)で、WndProcメソッドを上書きし、フォームに閉じていることを示すフラグを設定しました。検証イベントハンドラーで、親フォームを取得し、フォームが閉じている場合はメソッドからの戻りをキャンセルできます。
私がやりたいのは、オブジェクトに対してこのチェックを実行して、既存のすべてのインスタンスに影響を与え、フォームが閉じているときに検証イベントをキャンセルすることです。イベントをキャンセルすることができません。
これがUserControlコードのシェルです。
public class SearchControl : UserControl
{
public SearchControl()
{
Validating += OnControlValitading;
}
public void OnControlValitading(object sender, CancelEventArgs e)
{
BaseForm frm = FindForm() as BaseForm;
if(frm != null && frm.IsClosing)
{
e.Cancel = true;
//TODO Cancel validation event on all objects
}
}
}