Previous topicNext topic
Help > 开发指南 > 窗体开发 > 控件参考 > 控件参考 > 菜单 > GridMenuBase(Sm空菜单) > 事件 >
CommandStateQuery

CommandStateQuery 必须验证命令状态时激发的事件。主要是设置一些菜单的启用状态。比如撤销、重置等这些根据表状态的命令的可用状态得根据实际情况而动态设置,这就需要用到CommandStateQuery 这个事件了。

e参数介绍:

Checked:决定当前命令是否处于Checked状态。

Enabled:决定当前命令是否启用。

Pressed:决定当前命令是否处于按下状态。

Visible:决定当前命令是否可见。

下面我们就弄一个简单的示例来演示一下如何让当前菜单的保存按钮在表没有修改时就不能点击保存按钮。

Vb.Net
Public Sub CommandStateQuery(sender As Object,e As  C1.Win.C1Command.CommandStateQueryEventArgs)
    '获得命令
    Dim cmd As C1Command=sender
    '获得对应的菜单
    Dim menu As GridMenuBase=cmd.UserData
    '如果是保存按钮
    If cmd.Name=BaseGridMenuNames.Save Then
        '如果是主表有变动,则让保存,如果没有变动则保存按钮变灰
        If menu IsNot Nothing AndAlso menu.BaseGrid.BaseBaseGrid.DataTableHelp.HasChanges Then
            e.Enabled=True
        Else
            e.Enabled=False
        End If
    End If
End Sub

C#
public void CommandStateQuery(object sender, C1.Win.C1Command.CommandStateQueryEventArgs e)
{
    // 获得命令
    C1Command cmd = sender as C1Command;
    // 获得对应的菜单
    GridMenuBase menu = cmd.UserData as GridMenuBase;
    // 如果是保存按钮
    if (cmd.Name == BaseGridMenuNames.Save)
    {
        // 如果是主表有变动,则让保存,如果没有变动则保存按钮变灰
        if (menu != null && menu.BaseGrid.BaseBaseGrid.DataTableHelp.HasChanges)
            e.Enabled = true;
        else
            e.Enabled = false;
    }
}