基于多个属性启用/禁用菜单项的最佳方法

时间:2013-09-26 18:40:49

标签: .net winforms

是否有任何真正好的策略可以根据多种条件启用和禁用菜单项?

示例 - 我有一个带有“保存”和“取消”工具栏菜单项(和其他)的可编辑网格。最初加载网格时,它会检查用户是否有权编辑项目。如果用户有权限,则可以编辑网格。最初禁用“保存”和“取消”,因为它们不是必需的。如果用户进行了编辑,那么我希望它们都能被启用。目前我使用我称之为'FormMode'的属性。当用户开始编辑时,它将表单/网格置于“脏”模式,并启用“保存”和“取消”按钮。如果更改了任何可编辑控件,则会将此(FormMode)属性设置为Dirty。如果他们点击“保存”或“取消”按钮,则会保存数据并再次禁用按钮(不需要它们)。

我的问题是,是否有更好,更优雅的方式来处理使用事件或其他属性启用/禁用?我在几十种表格和网格上都有相同的场景,似乎应该有一种更简单的方法来处理它。菜单项是否“了解”表单/网格状态并自动响应?我可以在多种形式上重复使用它们吗?

我不确定我的问题是否清楚 - 如果不是,请对不起。但似乎我花了很多时间让菜单项正常运行,具体取决于表单的“模式”。我喜欢在适当的时候启用它们。

grid in initial mode before editing:

grid during/after editing:

这是属性设置器:

 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

1 个答案:

答案 0 :(得分:0)

我是StackOverflow的新手。我没有足够的声誉发表评论,但我希望我能提供帮助。

看起来你有一个GridView控件,并且想要使用GridView控件的事件来禁用/启用命令栏的按钮。我建议您尝试DataGridView_CellValueChanged event。您可以启用保存和取消按钮,而不是像在MSDN示例中那样调用UpdateBalance()。如果CellValueChanged不适合你,那么还有CellBeginEdit和CellEndEdit。

每个命令按钮都应该有一个你应该能够使用的Click事件。我不知道您的保存按钮是自定义还是标准按钮。无论如何,应该存在可用于禁用的Click事件。

可以使用完整的GridView控件事件列表here。检查它们可能会有所帮助。虽然我可能不是一个沉重的.NET用户,但我已经使用事件在Excel中使用用户表单禁用/启用了命令按钮。我相信你也可以这样做。不要放弃!

- Jeoffri