当前位置: 首页 > 编程语言 > vfp > 正文

看实例学VFP:对组合框控件的再探索

时间:2009-04-11 www.bianceng.cn 老马

组合框控件(combobox)在vfp中也是一个常用的控件,组合框兼具文本框和列表框的功能,它的名称大概也由此而来。在vfp基础教程-组合框控件(combobox) 中已经比较详细地给出了组合框的常用属性和方法。

在组合框控件的应用中,很重要的一个环节是它的RowSourceType及RowSource这两个属性的组合。比如在看实例学VFP:对表中记录进行定位与查找操作这个例子中是把组合框的RowSourceType属性值设为“1-值”,而在看实例学VFP:去除查询结果中的重复记录这个例子中是把组合框的RowSourceType属性值设为“2-别名”。

这个控件有一个style属性,如果将这个属性设为“0-下拉组合框”,可以在使用下拉列表框的同时,使用组合在其中的文本框,这也是系统默认的属性值;如果将这个属性设为“2-下拉列表框”,则组合框只具有列表框的功能;如果需要在表单启动时组合框自动有一个选定值,可以在表单的init事件中将这个选定值赋给组合框的displayvalue属性。

这个控件还有一个值得一提的属性:Text,通过这个属性我们可以使用输入到组合框中的文本框中的值,也可以把这个值赋给一个变量。这个属性很重要,比如有时需要把输入到文本框中的值同时添加到组合框的列表项中,就需要使用这个属性。

关于向组合框添加列表项:MSDN帮助给出了一个很好的建议,最好在添加前检查一下组合框的下拉列表中有无重复值,并给出了一段发生在组合框的Valid事件中的示例代码。在本文随后给出的例子,在添加列表项这部分的代码中参考了MSDN的这部分代码,不过本例是将这个操作放到了命令按钮的click事件中。

本文来设计一个组合框既可以选值又可以输入值的例子,在看实例学VFP:超级链接控件的使用一例中我们只能访问预设在列表框中的几个网站,本文用组合框控件来改进一下这个例子,使之不仅能访问预设的网址,还可以通过在组合框的文本框中输入值来访问一个网址,并且在访问后这个网址会自动添加到组合框的下拉列表中,运行界面如下图:

 

制作步骤如下:

一、新建表单,将其caption属性设置为“编程入门网-组合框控件”,保存为“表单1.scx”。

二、向表单上添加一个label控件,将其caption属性值设置为“请输入或选择一个网址”。

三、向表单上添加一个命令按钮控件command1,将其caption属性值设置为“Go!”。

四、向表单上添加一个组合框控件combo1,将其RowSourceType属性值设为“1-值”,style属性值使用默认的为“0-下拉组合框”。

五、按上图适当调整各控件及表单的大小和位置。

六、添加事件代码:

1、表单的init事件代码:

this.AddObject("Hyperlink1","HyperLink") &&添加超级链接控件
this.combo1.additem("Baidu")
this.combo1.additem("Google")
this.combo1.additem("Sogou")
this.combo1.additem("Yahoo")
this.combo1.additem("MSDN")
this.combo1.additem("CSDN")
this.combo1.additem("Yesky")
this.combo1.additem("小小鸟")

2、命令按钮的click事件代码:

str1=alltrim(thisform.combo1.displayvalue)
do case str1
   case str1="Baidu"  &&访问百度
        thisform.Hyperlink1.NavigateTo("www.baidu.com")
   case str1="Google" &&访问谷歌
        thisform.Hyperlink1.NavigateTo("www.google.cn")
   case str1="Sogou" &&访问搜狗
        thisform.Hyperlink1.NavigateTo("www.sogou.com")
   case str1="Yahoo" &&访问雅虎
        thisform.Hyperlink1.NavigateTo("one.cn.yahoo.com")
   case str1="MSDN"  &&访问微软MSDN主页
        thisform.Hyperlink1.NavigateTo("msdn.microsoft.com")
   case str1="CSDN"  &&访问CSDN网站
        thisform.Hyperlink1.NavigateTo("www.csdn.net")
   case str1="Yesky"  &&访问天极
        thisform.Hyperlink1.NavigateTo("www.yesky.com")
   case str1="小小鸟"  &&访问编程入门网
        thisform.Hyperlink1.NavigateTo("www.bianceng.cn")
   otherwise
       if empty(alltrim(thisform.combo1.text))
          messagebox("请输入或选择一个网址!")
          thisform.combo1.setfocus
          return
       endif
       thisform.Hyperlink1.NavigateTo(thisform.combo1.text)
       lItemExists=.f.  &&假设列表中没有该值。   
        FOR i=1 to THISform.combo1.ListCount   
           IF THISform.combo1.List(i)=THISform.combo1.Text   
              lItemExists=.T. 
              EXIT   
           ENDIF   
        ENDFOR   
        IF !lItemExists
           THISform.combo1.AddItem(THISform.combo1.Text)   
        ENDIF
endcase

七、运行“表单1.scx”。

本例代码在Win2003+VFP6.0环境下调试通过。

查看全套“菜鸟也学VFP”教程