【问题标题】:What is the logical difference between PushButtonState.Default and PushButtonState.Normal?PushButtonState.Default 和 PushButtonState.Normal 之间的逻辑区别是什么?
【发布时间】:2019-06-08 11:00:03
【问题描述】:

我在 DataGridView 中将ButtonRenderer.DrawButton 用于带有带有图像的按钮的列,并且我对何时应该使用每个PushButtonState 值感兴趣。

Here 是官方文档。它说:

  • Default - 按钮具有默认外观。
  • Disabled - 按钮被禁用。
  • Hot - 按钮很热。
  • Normal - 按钮外观正常。
  • Pressed - 按钮被按下。

我不太了解的是DefaultNormal。这两个角色有什么区别?在下面的屏幕截图中,这两个角色与传递给 ButtonRenderer.DrawButton 方法的 focused bool 参数组合在一起。

【问题讨论】:

  • 默认按钮是在没有明确用户选择的情况下按下 SpaceBar/Enter 键时引发 Click 事件的按钮(例如在 MessageBoxes 中,当 Button 设置了 DialogResult 值时)。正常的是具有标准渲染的 Button。

标签: c# .net winforms button


【解决方案1】:

关于默认状态

根据button control 的基于 Windows 的桌面应用程序的用户体验指南:

当用户按下 Enter 键时会调用默认命令按钮。 它由开发人员分配,但任何命令按钮都成为 用户 tab 时默认。

在windows窗体中,要将按钮设置为窗体的默认按钮,可以将其设置为窗体的AcceptButton。欲了解更多信息,请参阅How to: Designate a Windows Forms Button as the Accept Button Using the Designer

关于其他州

如果你看看ButtonStandardAdapter负责绘制标准按钮,你会看到:

private PushButtonState DetermineState(bool up) {
    PushButtonState state = PushButtonState.Normal;

    if (!up) {
        state = PushButtonState.Pressed;
    }
    else if (Control.MouseIsOver) {
        state = PushButtonState.Hot;
    }
    else if (!Control.Enabled) {
        state = PushButtonState.Disabled;
    }
    else if (Control.Focused || Control.IsDefault) {
        state = PushButtonState.Default;
    }

    return state;
}

IsDefault 为一个按钮返回true,该按钮设置为AcceptButtonForm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2020-09-07
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多