VFP中防止按退格键时焦点移到上个控件
出处:网络
当我们的表单上有许多的控件时,一般以文本控件为主,那么按动退格键(BackSpace)时,光标移到控件的最左边后,就会继续往上一个控件的焦点移去,使操作起来很不方便,在一些容易误输入的地方,很不小心的就把上一个数据给清除了,为了避免这个问题的发生,我们可以通过以下方法来实现:
首先我们需要将所有VFP的基类自定义作为自己的类,比如TEXTBOX、EDITBOX等,虽然她是很简单的控件,但我们还是要这么去做,这是为以后的维护带来很多的方便,而且在本文的操作上也要求这么做,至于她的必要性及重要性,本文将不做详细介绍了。
当我们自定义了一个文本控件,比如叫TXT吧,那么在她的 KeyPress 事件中,写下如下代码:
if nKeyCode = 127 and this.SelStart = 0 and this.SelLength = 0
NoDefault
endif
意思是说,当键盘按了退格键(BackSpace),并且鼠标在文本控件中的选择字符的长度为零,并且光标在控件的最左端时,然后不发生任何事件,也即将原有的默认事件给屏蔽了,那么也就不会使焦点移到上一个控件了!
原因:
这里需要对控件中选择的字符以及光标所在的位置进行判断,因为在其他很多的情况下,我们还是需要利用退格键(BackSpace)来删除文本框中的字符,只有当光标已经被退到最左边,且没有选择字符时才禁止退格键(BackSpace)的默认功能!
需要注意的是:
如果你需要在表单的TXT文本控件的 KeyPress 中再加入其他的代码,请注意要先写上
DoDefault(nKeyCode,nShiftAltCtrl)
然后写上其他你需要的代码,不然会因为写上了其他的代码而是类中的代码无法正确的继承下来!
[返回] |