1

フォームが読み込まれたときにフォーカスを取得するカスタムコントロールがあります。空のままにするか、無効なデータが入力された場合に処理する検証イベントを使用します。

私の問題は、ユーザーがフォームをロードしてから閉じると、検証プロセスが実行され、空のままであるためエラーが表示されることです。

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
        }
    }
}
4

1 に答える 1

0

OnValidating をオーバーライドし、CancelEventArgs を使用します。

public class SearchControl : UserControl
{

    protected override void OnValidating(CancelEventArgs e)
    {
        BaseForm frm = FindForm() as BaseForm;
        if (frm != null && frm.IsClosing)
        {
            e.Cancel = true;
            //TODO Cancel validation event on all objects
        }
    }
}
于 2012-10-08T23:22:45.903 に答える