複数の条件に基づいてメニュー項目を有効または無効にするための本当に優れた戦略はありますか?
例 - 「保存」および「キャンセル」ツールバー メニュー項目 (およびその他) を含む編集可能なグリッドがあります。グリッドが最初にロードされるときに、ユーザーがアイテムを編集する権限を持っているかどうかがチェックされます。ユーザーがパーミッションを持っている場合、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