这种“文本框+列表框”的设计我已应用多年,下面说一下我的一点应用体会:
1. 当列表框中的条目不多时,列表框随输入框的内容动态定位没有问题,但当列表框的条目很多时,这种设计就有缺陷。试想:每按一下键就要等待若干秒,用户体验会很差。我的方案:当用户在文本框中按下回车键时,才执行列表框定位操作,同时焦点也不离开文本框,便于用户继续输入。文本框的 KeyPress 代码如下:
3. 既然在文本框中按回车键执行的是列表框定位操作,那么只能按 TAB 键将焦点移动到下一个控件了,这也是 Windows 的默认按键。
4. 当焦点离开文本框时,若输入的内容在列表框中不存在,应该给出提示并阻止用户离开焦点。同时,若用户仅输入了内容的前半部分,应该将其余内容补齐。文本框的 Valid 事件代码:
1. 当列表框中的条目不多时,列表框随输入框的内容动态定位没有问题,但当列表框的条目很多时,这种设计就有缺陷。试想:每按一下键就要等待若干秒,用户体验会很差。我的方案:当用户在文本框中按下回车键时,才执行列表框定位操作,同时焦点也不离开文本框,便于用户继续输入。文本框的 KeyPress 代码如下:
程序代码:
IF nKeyCode = 13 NODEFAULT SELECT 表1 cText = ALLTRIM(THIS.Text) IF SEEK(cText) THIS.Parent.lstItem.Value = 字段1 ENDIF ENDCASE2. 在实际应用中,表字段作为列表框的数据来源的情况较多,在表中查找记录要比遍历列表框的每个条目速度要快,特别是对表采用索引查找时。我一般都是先用 Seek 命令定位记录,然后再将表字段的值赋于列表框的 Value 来刷新列表框(见上面的 KeyPress 代码)。
3. 既然在文本框中按回车键执行的是列表框定位操作,那么只能按 TAB 键将焦点移动到下一个控件了,这也是 Windows 的默认按键。
4. 当焦点离开文本框时,若输入的内容在列表框中不存在,应该给出提示并阻止用户离开焦点。同时,若用户仅输入了内容的前半部分,应该将其余内容补齐。文本框的 Valid 事件代码:
程序代码:
LOCAL cText cText = ALLT(THIS.Value) IF EMPTY(cText) RETURN ENDIF SELECT 表 IF SEEK(cText) THIS.Value = 字段 THIS.Parent.lstItem.Value = 字段 ELSE MESSAGEBOX('物料代码输入有误!',48,'提示') THIS.Value = '' RETURN 0 ENDIF5. 列表框有一个缺陷:列表框为活动控件时,按回车键,焦点并不会移动到下一个控件,这对于喜欢输入数据后按回车键的用户来说,可能不习惯。解决方法:在列表框的 KeyPress 事件中输入如下代码:
IF nKeyCode = 13 KEYBOARD '{TAB}' ENDIF
[此贴子已经被作者于2015-12-2 10:50编辑过]
泉城飞狐