【问题标题】:Prevent Enter key from firing button click even in vb6防止输入键在vb6中触发按钮单击事件
【发布时间】:2008-10-02 06:23:59
【问题描述】:

我有一个带有进度条和一个在进程运行时显示的取消按钮的表单。按钮的“取消”属性设置为 true,因此按下转义键会取消该过程。

但是,由于按钮是表单上唯一能够获得焦点的控件,如果用户在进程运行时不小心按了 Enter(或空格键),它将被取消。

我通过将 KeyPreview 设置为 true(在表单上)然后将 KeyAscii 设置为 0 来阻止空格键工作,但这种方法似乎不适用于 enter 键,因为按钮单击事件首先触发。

我已尝试将按钮的 TabStop 属性设置为“false” - 没有变化。

【问题讨论】:

    标签: vb6


    【解决方案1】:

    在我看来,Enter 键应该会激活取消按钮。还是您要求用户伸出鼠标?为什么?

    我建议在用户取消操作后只添加一个确认对话框,这样如果有人不小心按了 Enter 键,就有机会继续说“不,我不想取消”。

    但作为用户如果取消按钮有焦点并且我无法按键盘上的 Enter 键激活它,我会很恼火。

    我的 2 美分

    【讨论】:

    • 是的 - 公平点和确认对话框正是目前发生的事情。我正在折腾什么更烦人,当您故意单击取消或 Enter 键不起作用时的确认对话框。 (记住 ESCAPE 仍然有效)
    • 但是如果我不小心点击了 Escape 并且进程停止了怎么办?在我看来,这会比确认对话框更烦人。但我知道我没有关于这种情况的所有背景信息,而且情况可能并非如此。只是一个想法。
    • 人们习惯于确认对话框。 UI 设计的第一条规则是创建一个熟悉的设计。
    • 谢谢塞尔吉奥。我想你已经让我相信现状可以保持下去。我仍然不喜欢确认对话框:-)
    【解决方案2】:

    添加一个大小为 1x1、无标题、无边框等的默认按钮。为它创建一个不执行任何操作的处理程序。 Escape 键仍会像现在一样执行取消操作。

    【讨论】:

    • 是的,添加另一个什么都不做的控件,并且必须具有 inintal 焦点。
    • 我认为这确实回答了我原来的问题,所以公平地说我应该接受它。谢谢。 (尽管塞尔吉奥已经说服我不要改变任何东西;-)
    • 如果您接受此设计,用户仍然可以使用 Tab 键切换到取消按钮并按空格键取消。用户不需要鼠标。
    • 是的——这在我的脑海里。即使您将按钮放置在远离表单的位置,这也有点麻烦。但你确实回答了这个问题,对你很尊重。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2014-11-08
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多