【问题标题】:Keyboard control of GUI dialogs - Should default button change with focus?GUI 对话框的键盘控制 - 默认按钮是否应随焦点更改?
【发布时间】:2011-07-15 12:03:49
【问题描述】:

在 GUI 对话框中,大多数应用程序提供如下键盘控制:

  1. Enter 键 - 按下默认按钮。 (默认通常用粗体按钮边框表示。)
  2. Esc 键 - 按取消或关闭按钮。
  3. 空格键 - 按下当前具有键盘焦点的小部件。
  4. Tab 键 - 将焦点移至下一个小部件。

问题是,当键盘焦点位于作为按钮的小部件上时,是否应将默认按钮更改为具有焦点的按钮?

我发现此行为存在一些问题:

  1. 重绘按钮以展开原始默认按钮的轮廓并将焦点下的按钮重新加粗为新默认按钮的显示噪音。
  2. Space 键现在与 Enter 键有些多余。
  3. 现在没有键盘加速器来获取正常的默认按钮(通常是确定按钮)。

但是,似乎趋势已经朝着这个方向发展,将焦点更改为另一个按钮的默认按钮。这种偏离早期 GUI 的理由是什么?鉴于无法按下原始默认按钮,它似乎提供的功能较少。人们是否发现原始模型过于复杂,用户无法理解?我认为对话框的键盘控制将是高级用户的任务,他们可以轻松理解模型并且更喜欢始终使用当前按钮 (Space) 和原始默认按钮 (Enter) 的加速键。

请注意,Qt for one 支持更改:QPushButton 的 autoDefault 属性负责更改默认按钮的行为。默认情况下,它的值为 true。因此,您必须采取额外措施将所有按钮设置为 false,以防止它们成为焦点时的默认按钮。

【问题讨论】:

  • 你有什么证据表明这种新趋势?
  • Firefox 对话框、Microsoft word 对话框等

标签: qt user-interface focus keyboard-shortcuts


【解决方案1】:

不是“背离早期的 GUI”,至少如果“早期的 GUI”是指 Windows 1.0,则不是。您描述的行为从一开始就是这样。

当按下 Enter 键时,总是“按下”焦点按钮。默认按钮仅在以下两种情况下触发:

  • 默认按钮具有焦点(默认情况下),或者
  • 重点是不处理 Enter 按键的控件(例如静态控件,或未设置 ES_WANTRETURN 样式标志的单行文本框)。

著名的Win32博主Raymond Chenhas a post explaining this behavior(特别关注最后两段引用):

对话框维护“默认按钮”(始终是按钮)的概念。默认按钮通常以独特的外观(粗轮廓或不同颜色)绘制,并指示当您按 Enter 时对话框将执行的操作。请注意,这与具有焦点的控件不同。

例如,从“开始”菜单打开“运行”对话框。观察确定按钮是默认按钮;它的外观与其他按钮不同。但重点是编辑控件。您的输入进入编辑控件,直到您按 Enter; Enter 激活默认按钮,就OK了。

当您浏览对话框时,观察默认按钮会发生什么。当对话框将焦点移至按钮时,该按钮将成为新的默认按钮。但是,当对话框将焦点移到根本不是按钮的地方时,“确定”按钮会恢复其作为默认按钮的位置。

对话框管理器会记住最初创建对话框时哪个控件是默认按钮,当它将焦点移到不是按钮的东西时,它会将原始按钮恢复为默认按钮。

【讨论】:

    【解决方案2】:

    我期望的行为是:

    1. 如果我在弹出窗口时按回车,它应该按默认按钮
    2. 如果我按 Tab 键,我将开始浏览小部件。在这种情况下,有两种选择:​​i>

    2.1 我按下回车 - 这个事件应该被传递到焦点小部件。 无需更改默认按钮 - 只需将事件交给焦点小部件即可。

    2.2 我按下了退出键。在这种情况下,一切都应该回到创建窗口后的状态。

    注意事项:

    • 我来自混合背景 - 我不知道我是在 Windows、Linux 还是移动操作系统中学到的!这正是我期望的结果。
    • 我不使用空格键(不知道它的功能)

    【讨论】:

    • 这听起来很像标准的 Windows 行为,除了 Esc 键总是会关闭对话框,除非它首先被焦点控件窃取。 Space 键总是发送到焦点控件——它由对话管理器处理。按钮将其解释为“推动”,因此无论哪个按钮具有焦点,都会被点击。显然它对文本框的工作方式不同。
    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多