
| 出版日期:2000-05-08 总期号:919 本年期号:31 |
|
巧用vfp中combobox控件一例
林春青 combobox(组合框)是列表框和文本框的组合,既有文本框控件的特性,又有列表框的特性。但大多认为它不能接受新输入的值,笔者在开发一销售管理系统时曾用文本框(text)叠在combobox上来解决这一问题,那种方法是: 将combo1的style属性设置为下拉列表框,在combo1的interactivechange事件中添加代码:thisform.text1.value=thisform.combo1.value,保存时只要保存text1value。但这种方法显得有点笨拙,后来笔者发现其实利用combobox的displayvalue属性就能解决这一问题。 下面就利用一个例子来谈谈怎样巧用combobox。 例如在一个销售管理系统中,常需要记录下客户的所在辖区或地址,其中有省份一项,为了方便用户操作,这时我们就可用combobox来做对话框。 步骤如下: 1.在表单上建立combo1; 2.将combo1的style属性设置为下拉列表框; 3.在rowsource内输入全国的三十几个省市自治区名称。 这样,用户只需从列表框中选择即可,保存值时只要保存combo1.value就可以了。但因为有三十多个省,用户选择起来并不是很方便,而且公司也并非会在所有省都有业务来往,这样就在列表框中形成了数据冗余。 下面就介绍一种较合理的方法。其基本思路是combobox中的值来源于用户输入,曾输入过的省份,以后出现时则只要从组合框中选择即可,这样就避免了数据冗余,具体步骤如下: 设记录客户信息的表名为client.dbf,其记录省份的字段为province,将表添加到form的数据环境中,combo1的属性让它全部为默认值即可。在form的init事件添加如下代码: select distinct province from client into cursor provrow &&从表client中选出已存在的省份到临时表provrow中,且过滤掉重复值 do while !eof() thisform.combo1.additem(provrow.province) &&将选出的省份加到combo1中 skip enddo 当将客户信息保存到表中以后,在保存事件中添加如下代码: if empty(thisform.combo1.displayvalue) &&判断是否为空值 messagebox(″请输入值″,48,″″) else insert into client (province) values (thisform.combo1.displayvalue) thisform.combo1.clear select distinct province from client into cursor provrow do while !eof()&&刷新combo1列表值 thisform.combo1.additem(provrow.province) skip enddo endif 这样将新输入的值就添加到组合框中,值得注意的是,这里保存事件的代码应写为thisform.combo1.displayvalue,而不是value。因为combo1.value只能返回组合框中列表中的值,不能返回新输入的值。而displayvalue有两种数据形式,一是数值型,返回的值为输入值(如果在组合框的列表中存在)在列表中为第几项;二是字符型,返回显示的文本内容(不管是否在列表中存在)。系统默认为后一种,所以不要将displayvalue属性设置成数值型值。 当遇到诸如上述情况,不妨使用该方法,使combobox列表中的值动态增加,既专业又方便用户使用。 |
|||||||||||||||||