2013-09-26 94 views
4

有沒有真正的好策略可以根據多個條件啓用和禁用菜單項?基於多個屬性啓用/禁用菜單項的最佳方式

示例 - 我有一個帶有「保存」和「取消」工具欄菜單項(和其他)的可編輯網格。最初加載網格時,會檢查用戶是否有權編輯項目。如果用戶有權限,可以編輯網格。最初保存和取消被禁用,因爲它們不需要。如果用戶進行編輯,那麼我希望他們都被啓用。目前我用我所謂的'FormMode'屬性來做這件事。當用戶開始編輯時,它將表單/網格置於「髒」模式,並啓用「保存」和「取消」按鈕。如果任何可編輯的控件更改,它將此(FormMode)屬性設置爲Dirty。如果他們點擊保存或取消按鈕,則數據被保存並且按鈕被再次禁用(它們不是必需的)。

我的問題是,是否有更好,更優雅的方式來處理這種啓用/禁用通過使用事件或其他屬性?我在幾十個表單和網格上都有這個相同的場景,似乎應該有一個更簡單的方法來處理它。菜單項可以「識別」表單/網格狀態並自動響應?我可以重複使用多種形式嗎?

我不確定我的問題是否清楚 - 對不起,如果不是。但似乎我花了很多時間讓菜單項依據表單的「模式」正確運行。我喜歡只有在適當時才啓用它們。

grid in initial mode before editing:

grid during/after editing:

這裏是屬性setter:

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 
+0

唉 - 我不能發表圖片要麼... :( – Jim

+1

使用工具欄在編輯器中包括圖像 – StriplingWarrior

+0

它不會讓我去救因爲我沒有。 10分... – Jim

回答

0

我是新來的StackOverflow。我沒有足夠的聲望發表評論,但我希望我能提供幫助。

它看起來像你有一個GridView控件,並希望使用GridView控件的事件來禁用/啓用命令欄的按鈕。我建議嘗試DataGridView_CellValueChanged event。不要像在MSDN示例中那樣調用UpdateBalance(),而是啓用保存和取消按鈕。如果CellValueChanged不適合你,還有CellBeginEdit和CellEndEdit。

每個命令按鈕都應該有一個您應該可以使用的Click事件。我不知道你的保存按鈕是自定義的還是標準的。無論如何,應該存在可用於禁用的Click事件。

GridView控件事件的完整列表可用here。審查它們可能會有所幫助。雖然我可能不是一個沉重的.NET用戶,但我已經使用事件在Excel中使用User Forms來禁用/啓用命令按鈕。我相信你也可以這樣做。不要放棄!

--Jeoffri

+0

謝謝。我實際上使用DevExpress Grid Control,並且我使用更改的單元格值來設置FormMode屬性,但我的問題更多地是關於是否有辦法自動執行此操作,我認爲HighCore上面提到的可能是最好的做法。 – Jim