メンバ一覧 DisableObjectsInForm 前のメソッド 次のメソッド

VB C# ALL プログラミング言語によるフィルタ (ここで選んだ言語で選別された説明や図だけが表示されます)

★ このメソッドは、V9.60.25.32 および V8.60.25.32 からベータ提供されたもので、この仕様は変更されることがあります。

DisableObjectsInForm メソッド

機能および役割

このフォーム上にある全コントロールの Enabled メソッドを偽 (False, false) に設定し、操作できないようにする。ただし、パラメタで指定されたコントロールを除外できる。

このメソッドは、長時間を要する処理の前などに、処理中にアプリケーション画面の操作を禁止するために使用することを想定している。再度操作を許可する場合、EnableObjectsInForm メソッドを使用して元の状態の戻すことができる。

所属クラス (ツーピーススタイルの場合にこのメソッドが宣言されているクラス)

AppliTech.WorkFrame.FormBase (ローカル)

呼出し方

fB.DisableObjectsInForm(除外コントロール配列)

(ただし fB は、クラス FormBase のインスタンス)

戻り値の型および意味

(戻り値なし)

パラメタの型および意味

除外コントロール配列 (Object 配列型) Enabled プロパティを変更したくないコントロールの実体を指定する。この配列に格納可能なコントロールは、MANDALA 指示コントロールである。すなわち、Button (System.Windows.Forms.Button), MenuItem (System.Windows.Forms.MenuItem), ToolStripButton (System.Windows.Forms.ToolStripButton), ToolStripMenuItem (System.Windows.Forms.ToolStripMenuItem) などが格納可能なオブジェクトの型となる。MANDALA 指示コントロール以外のオブジェクトが指定されている場合、実行時例外が発生する。

例外の発生 (誤った呼出しの際に発生する例外)

「除外する指示コントロールのパラメタとして指定できない型 (型名) のオブジェクトです (DisableObjectsInForm)」

「除外する指示コントロールのパラメタとして使用できない名前 (名前) のコントロールが指定されました (DisableObjectsInForm)」

「DisableObjectsInForm が呼び出された後でないと使えません (EnableObjectsInForm)」

使用上のヒントと注意事項

DisableObjectsInForm メソッドを実行すると、すべてのデータ項目が Disabled 状態になるので、その時点で入力可能だったデータ項目はフォーカスを失う。このため、そのデータ項目の Check フックメソッドなどが呼び出される。もし入力途中の内容がエラーと判断されると、そのデータ項目はエラー状態のまま使用不可となる。Update フックメソッドなどで本メソッドを使用する場合、エラー項目があるとフックメソッドが呼び出されないため、このようなことにはならない。

DisableObjectsInForm メソッドと EnableObjectsInForm メソッドは、対になるように実行される必要がある。本メソッドを使用する場合の処理シーケンスは次のようになる。

  1. DisableObjectsInForm を呼び出す。
  2. 時間のかかる処理 (データベースへの問い合わせ、サーバとの通信など)を行う。
  3. 2 の処理を行うループの中で DoEvents を呼び出すと除外コントロールを操作することができる。そこで、ボタンなどでキャンセル処理などを呼び出せる。
  4. 処理の完了、あるいはキャンセル指示などによりループが終了する。
  5. EnableObjectsInForm を呼び出す。

これらは同一のフックメソッド内で完結していなければならない。

このシーケンスを守らず、EnableObjectsInForm を先に呼び出したり、DisableObjectsInForm を連続して呼び出したりすると実行時例外が発生する。

関連事項

このメソッドで使用不可にしたコントロールの状態を元に戻すためには、EnableObjectsInForm メソッドを使用する。

使用例

Friend Function DisableAll_GetEvent(ByVal fB As FormBase) As Boolean
    'ループ脱出フラグ
    AbortDisableAll = False
    'ループ回数
    Dim wk_imax As Integer = 1000

    Dim wk_form As Fr_受注業務 = CType(fB.myForm, Fr_受注業務)

    'Disable All ボタンのテキストを保存
    Dim wk_svText As String = wk_form.Cm_DisableAll.Text

    'コントロール無効化
    fB.DisableObjectsInForm(New Object() {wk_form.Cm_EnableAll, wk_form.Mn_EnableAllMn})

    'ダミーウェイトのループ
    For i As Integer = 0 To wk_imax
        '脱出フラグのチェック
        If AbortDisableAll Then
            Exit For
        End If
        'ボタンに状態を表示
        wk_form.Cm_DisableAll.Text = i.ToString() + "/" + wk_imax.ToString()
        '別の GUI イベントを実行
        System.Windows.Forms.Application.DoEvents()
        'ウェイト用スリープ
        System.Threading.Thread.Sleep(10)
    Next

    'コントロール無効解除
    fB.EnableObjectsInForm()

    'Disable All ボタンのテキストを復元
    wk_form.Cm_DisableAll.Text = wk_svText

    Return FormBase.GETEVENT_Allow
End Function
internal bool DisableAll_GetEvent(FormBase fB) {
    //ループ脱出フラグ
    AbortDisableAll = false;
    //ループ回数
    int wk_imax = 1000;

    Fr_受注業務 wk_form = (Fr_受注業務)fB.myForm;

    //Disable All ボタンのテキストを保存
    String wk_svText = wk_form.Cm_DisableAll.Text;

    //コントロール無効化
    fB.DisableObjectsInForm(new object[] {wk_form.Cm_EnableAll, wk_form.Mn_EnableAllMn});

    //ダミーウェイトのループ
    for (int i = 0; i < wk_imax; i++) {
        //脱出フラグのチェック
        if (AbortDisableAll) {
            break;
        }
        //ボタンに状態を表示
        wk_form.Cm_DisableAll.Text = i.ToString() + "/" + wk_imax.ToString();
        //別の GUI イベントを実行
        System.Windows.Forms.Application.DoEvents();
        //ウェイト用スリープ
        System.Threading.Thread.Sleep(10);
    }

    //コントロール無効解除
    fB.EnableObjectsInForm();

    //Disable All ボタンのテキストを復元
    wk_form.Cm_DisableAll.Text = wk_svText;

    return FormBase.GETEVENT_Allow;
}
boolean DisableAll_GetEvent(FormBase fB) {
    Fr_受注業務 wk_form = (Fr_受注業務)fB.myForm.getJFrame();
    fB.DisableObjectsInForm(new Object[] { wk_form.Cm_EnableAll, wk_form.Mn_EnableAllMn });
    new Thread(this).start();
    return FormBase.GETEVENT_Allow;
}