5

複数の条件に基づいてメニュー項目を有効または無効にするための本当に優れた戦略はありますか?

例 - 「保存」および「キャンセル」ツールバー メニュー項目 (およびその他) を含む編集可能なグリッドがあります。グリッドが最初にロードされるときに、ユーザーがアイテムを編集する権限を持っているかどうかがチェックされます。ユーザーがパーミッションを持っている場合、hd はグリッドを編集できます。保存とキャンセルは必要ないため、最初は無効になっています。ユーザーが編集を行った場合は、両方を有効にしたいと思います。現在、私はこれを「FormMode」プロパティと呼んでいます。ユーザーが編集を開始すると、フォーム/グリッドが「ダーティ」モードになり、[保存] ボタンと [キャンセル] ボタンが有効になります。編集可能なコントロールが変更されると、この (FormMode) プロパティが Dirty に設定されます。[保存] または [キャンセル] ボタンをクリックすると、データが保存され、ボタンは再び無効になります (これらは必要ありません)。

私の質問は、イベントまたは他のプロパティを使用して、この有効化/無効化を処理するためのより良い、よりエレガントな方法はありますか? 私はこれと同じシナリオを数十のフォームとグリッドで使用していますが、もっと簡単に対処する方法があるはずです。メニュー項目はフォーム/グリッドの状態を「認識」して自動的に応答できますか? また、それらを複数のフォームで再利用できますか?

私の質問が明確かどうかわかりません。そうでない場合は申し訳ありません。しかし、フォームの「モード」に応じてメニュー項目を正しく動作させるのに多くの時間を費やしているようです。適切な場合にのみ有効にするのが好きです。

編集前の初期モードのグリッド:

編集中/編集後のグリッド:

プロパティセッターは次のとおりです。

 Public Property GridDataMode() As Mayfran.Base.BaseUtilities.FormMode Implements IGridDataMode.GridDataMode
    Get
        Return _GridDataMode
    End Get
    Set(ByVal arg As Mayfran.Base.BaseUtilities.FormMode)
        'if mode is different from previous mode, then continue:
        If _GridDataMode <> arg Then
            _GridDataMode = arg
            Select Case _GridDataMode
                Case FormMode.Initial
                    'nothing to do here
                Case FormMode.Dirty, FormMode.NewRecord
                    barButtonItemSave.Enabled = Editable
                    barButtonItemCancel.Enabled = True
                    barButtonItemSelectAll.Enabled = False
                    barButtonItemDelete.Enabled = False
                    barButtonItemPrint.Enabled = False
                    barButtonItemRefresh.Enabled = False
                Case FormMode.RecordLoaded
                    barButtonItemSave.Enabled = False
                    barButtonItemCancel.Enabled = False
                    barButtonItemSelectAll.Enabled = True
                    barButtonItemDelete.Enabled = Editable
                    barButtonItemPrint.Enabled = True
                    barButtonItemRefresh.Enabled = True
                Case Else
                    Exit Select
            End Select
            RaiseEvent GridModeChanged(arg)
        End If
    End Set
End Property
4

1 に答える 1