对于数据输入人员而言,使用鼠标反而降低操作的效率。比方说,假设操作人员要新增数据时,除了可以使用鼠标按下新增按钮,也可以直接按下功能键[F2],在这种情况下,您觉得操作人员会使用什么方法呢?根据经验,由于数据输入人员对键盘上各类按键的配置位置相当熟悉,因此几乎所有的输入人员都会采用立即可按下的功能键,而不会去使用鼠标,因为他或她不需要将手离开键盘使用鼠标,操作的效率自然提高。
----所以,一个设计良好的系统,应该是既能使用鼠标操作,也能使用键盘操作。由此可见,为表单建立功能键的重要性。
----要为表单建立功能键,关键在于KeyPress事件的使用。因为每当您在表单中按下并放开某一键时,表单的KeyPress事件便会被引发。显然您只需要在表单的KeyPress事件程序中,去拦截使用者在表单中所按下的每一个键,并且判断它是否是特定功能键,便能决定是否要执行特定的操作。
----然而,这却引发了另一个值得讨论的问题,那就是并非只有表单才拥有KeyPress事件,许多控件也拥有KeyPress事件。比方说,您目前在表单中的某一TEXT输入框中,此时若按下并放开某一按键,所引发的将是此TEXT输入框的KeyPress事件,而表单的KeyPress事件将不会引发。因此也许您会问,我们是否必须为表单中所有控件的KeyPress事件程序都撰写判断使用者是否按下功能键的程序码?当然不是,因为这样不仅繁琐,而且还会降低效率。
----要让表单的KeyPress事件拦截作用控件的KeyPress事件,也就是先引发所属的表单的KeyPress事件再引发作用控件的KeyPress事件,只要将表单的KeyPressView属性设为.T.即可。这样,您只需要在表单的KeyPress事件程序中撰写判断使用者是否按下建立功能键的程序码,而不需要在表单所内含的各个控件的KeyPress事件中撰写此程序码。
----几项说明:
----1、由于VFP本身已经为各个功能键定义了按键集合,因此要使您所设定的各个功能键生效,首先必须清除VFP的按键集合定义。要清除VFP的按键集合定义,必须在表单的INIT事件程序中加入下面这道命令:
----CLEAR MACROS
----2、请务必将表单的属性设定为逻辑真值。
----3、VFP会自动传递两个参数给KeyPress事件程序,因此您必须在KeyPress事件程序的开头处使用LPARAMETERS或PARAMETERS命令来接收这些参数,否则将发生错误。第一个参数nKeyCode是一个数值型参数,其值为使用者是否按下功能键。第二个参数nShiftAltCtrl是一个数值型参数,从这个参数您可以判断出使用者按按键是否包含组合键Shift/Alt/Ctrl键。
----KeyPress事件程序的代码:
LPARAMETERS nKeyCode,nShiftAltCtrl
DO CASE
CASE nKeyCode= -1 &&[F2]
WITH THISFORM.cmdfind
.SetFocus
.Click
ENDWITH
CASE nKeyCode= -2 &&[F3]
WITH THISFORM.cmdprint
.SetFocus
.Click
ENDWITH
CASE nKeyCode= -3 &&[F4]
WITH THISFORM.cmdadd
.SetFocus
.Click
ENDWITH
ENDCASE
----从上面的程序中您可以发现,当按下特定功能键后,我们调用相对应的按钮的Click事件程序,也就是说,要执行的操作仍然是写在各个按钮本身的Click事件中。而调用SetFocus事件的是为了造成该按钮在外观和视觉上被选定的感觉。 ----4、我们希望在程序结束执行后,恢复默认的按钮集合定义。要达到此目的,必须在表单的退出事件中撰写下列命令:
----RESTORE MACROS
|