龙空技术网

永远不要将焦点设置到一个被禁用的控件上

漫漫开发路 337

前言:

如今朋友们对“net控件获取焦点的事件”大体比较珍视,大家都想要剖析一些“net控件获取焦点的事件”的相关资讯。那么小编在网上搜集了一些有关“net控件获取焦点的事件””的相关内容,希望你们能喜欢,朋友们快快来学习一下吧!

在对话框管理这个主题上,其中一个最不应该做的事情,就是:在将一个拥有输入焦点的控件禁用之前,没有将焦点移走。如果出现这种情况,用户在键盘上输入的内容将不会输送至对话框,为什么?

因为一个被禁用的窗口不能接收任何的键盘输入。如果恰好这个时候电脑没有鼠标(举个例子而已,现代的电脑系统,一般都会配备有鼠标),则对话框基本没法以任何方式被用户使用了。

(我曾经在一款微软的软件产品中碰到过这类错误场景,实在是令人非常沮丧啊。)

当你选择禁用一个控件之前,请检查它当前是否拥有输入焦点。如果是的话,则需要先将焦点切换到其他控件,然后再禁用它,这样用户可以继续正常地输入信息到对话框。

如果你不确定需要将焦点移动到哪个控件,则你可以将这个选择权交还给对话框管理器。具体来说,就是向对话框发送WM_NEXTDLGCTL消息,如下图所示:

在上面的代码中,我们封装了一个禁用对话框控件的帮助函数。首先判断目标控件是否具有输入焦点,如果是,则向对话框窗口发送WM_NEXTDLGCTL消息来将焦点移走。最后,我们就可以安全地禁用目标控件了。

(当然,你也不应该禁用对话框上的所有控件,如果那样的话,用户会再一次地遭遇上面所说的情况。)

总结

这也算是一个用户体验设计的小知识点。咱们开发出来的东西,先将自己变成用户,实际体验一下,看看感觉是不是很糟糕?

也即:己所不欲,勿施于人。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《Never leave focus on a disabled control》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。

我想:你值得拥有。

标签: #net控件获取焦点的事件