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

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

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

EnableObjectsInForm メソッド

機能および役割

このフォーム上にある全コントロールの Enabled メソッドを、直近の DisableObjectsInForm メソッド呼び出しの前の状態に戻す。

このメソッドは、かならず DisableObjectsInForm メソッドとペアで使用する。DisableObjectsInForm で (一時的に) 操作できないようにしたコントロールの状態をすべて復元するのがこのメソッドの役割である。

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

AppliTech.WorkFrame.FormBase (ローカル)

呼出し方

fB.EnableObjectsInForm()

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

戻り値の型および意味

(戻り値なし)

パラメタの型および意味

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

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

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

EnableObjectsInForm メソッドを実行すると、データ項目の使用可能状態が DisableObjectsInForm 実行前の状態に戻る。このとき、フォーカスは DisableObjectsInForm 実行直前にフォーカスのあったデータ項目になる。 もし非 MANDALA コントロールがフォーカスを有していた場合、そのコントロールにはフォーカスが戻らず、MANDALA の入出力コントロールの中で最後にフォーカスを有していた項目に戻る。

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

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

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

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

関連事項

フォーム上のすべてのコントロールを使用不可にするためには、DisableObjectsInForm メソッドを使用する。

使用例

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;
}
public void run() {
    abortDisableAll = false;
    Fr_受注業務 wk_form = (Fr_受注業務)myFormBase.myForm.getJFrame();
    String wk_svText = wk_form.Cm_DisableAll.getText();
    int wk_imax = 500;
    for (int i = 0; i < wk_imax; i++) {
        if (abortDisableAll) {
            break;
        }
        wk_form.Cm_DisableAll.setText(i + "/" + wk_imax);
        wk_form.Cm_DisableAll.repaint();
        try {
            Thread.sleep(10);
        }
        catch (InterruptedException pm_exception) {
            pm_exception.printStackTrace();
        }
    }
    abortDisableAll = false;
    wk_form.Cm_DisableAll.setText(wk_svText);
    myFormBase.EnableObjectsInForm();
}