关于恒耀平台

VBA知识库:列表框控件ListBox使用技巧,常用属性与方法

         发布日期:2024-10-14 15:29    点击次数:160

内容提要

列表框控件ListBox的常用属性与方法大家好,我是冷水泡茶,我们已经分享过以下几个控件的基础知识,可以点击直达查看:

【用户窗体UserForm】【命令按钮CommandButton】【文本框TextBox】【标签Label】【复合框ComboBox】【复选框CheckBox】【选项按钮OptionButton】今天我们一起来了解一下【ListBox】列表框控件。关于ListBox的案例,我们也分享过不少,感兴趣的朋友可以参考:

(1)TextBox+ListBox输入逐步提示

(2)中医诊所收费系统ListBox版

(3)多列下拉列表:生产加工单BOM表

(4)多级联动下拉列表:省、市、区县行政区划列表录入

(5)有人说“比下拉菜单快10倍,这才是Excel中NO.1的输入方法”!

(6)入库单:动态添加数据验证、日期控件、ListBox下拉框选择录入ListBox是一个比较常见的控件,相对来说,功能比【文本框TextBox】要复杂一些,如果与【复合框ComboBox】相比,各有所长,可谓不分伯仲吧,复合框可以看作是文本框与列表框的结合。

一、列表框基本设置,各种属性:

1、Name,列表框的初始Name为“ListBox1”。小提示:我们可以在列表框的Name中加一个前缀“Lst”,以示区分,如果全过程只有一个ListBox,那改不改都无所谓。

2、BoundColumn,与ComboBox类似,绑定的列,代表控件实际的值,在只有一列的情况下,无所谓,如果是多列,可以指定任何一列作为控件的值。

3、ColumnCount,显示多列时的列数,默认为1。小提示:当我们需要显示多列文本时,可以根据实际需要修改这个属性的值。

4、ColumnHeads,只有在列表来源是Excel工作表时才有效,默认值为False,这个属性从来没有用过,也没试过以工作表数据作为列表来源。(跟Comobox类似)

5、ColumnWidths,列宽, 在多列的情况下设置各列的列宽:

.ColumnWidths = "40, 60"

6、IntegralHeight,用来确定控件的大小是否应该调整以确保显示完整的列表项。小提示:当我们看到ListBox最后一项显示不全时,可以检查这个属性设置是不是设置为FALSE,把它改为TRUE。

7、List,列表框的列表,如果增加索引值参数 (从0开始),则指向具体的那一行列表项;可以用AddItem方法添加列表项目,或者,我们可以把一个数组添加到ListBox的List,这点跟ComboBox类似:

.List=arr.AddItem "A".List(.ListCount - 1, 1) = "A项目"

8、ListCount,列表项目计数,即有多少个列表项目。可用于指定最后一条记录,或者是可以通过ListCount计算出来的那条记录。也经常用于判断列表是否为空。

9、ListIndex,用户选中的第一项的索引,如果没有选中项,则返回-1。小提示:我们需要把点击的ListBox的某一行赋值给工作表单元格时,我曾经使用循环,for i =0 to listbox1.listcount-1,再用if listbox1.selected(i)=true 来确定所选中的行。实际上不需要那么做,可以直接用ListIndex来引用选中的行:

With ListBox1    For i = 1 To .ColumnCount - 1        Cells(Selection.Row, i + 1) = .List(.ListIndex, i)    NextEnd With

10、ListStyle,设置列表项在ListBox中的显示方式:(1)0-fmListStylePlain,以普通文本的形式显示。(2)1-fmListStyleOption: 每项旁边都显示一个选项按钮。

11、MultiSelect: 设置ListBox的选择模式,单选还是多选,我主要使用单选,多选的情况好像还没有用过:(1)0-fmMultiSelectSingle,单选。(2)1-fmMultiSelectMulti: 多选,仅用鼠标点选。(3)2-fmMultiSelectExtended: 扩展多选,鼠标结合Shitf、Ctrl键使用。

12、.....。

二、列表框的方法:1、Additem,添加列表项目。

小提示:如果是单列,直接添加item名称即可,如果是多列,还需要添加其他列的内容,与ComboBox类似:

With Me.ListBox2    .Clear    .MultiSelect = fmMultiSelectMulti    .ListStyle = 1    .List = arr    .AddItem "A"    .List(.ListCount - 1, 1) = "A项目"End With2、Clear,清除ListBox 中的所有内容,一般在窗体启动后,需要重新添加ListBox的List的时候,在使用AddItem方法的情况下,为了避免重复添加列表项,需要使用Clear方法清除原有列表项,如果是对整个List重新使用数组、字典一次性赋值,可以不用Clear。3、RemoveItem,移除列表项,参数为列表项的索引值,这个方法没怎么用过,下面的代码移除第一个、最后一个项目,连续执行,会移除所有列表项目,相当于Clear,添加If判断列表是否有项目,防止报错:

With Me.ListBox2    '//移除第一个    If .ListCount > 0 Then        .RemoveItem 0    End If    '//移除最后一个    If .ListCount > 0 Then        .RemoveItem .ListCount - 1    End IfEnd With4、SetFocus,把焦点移到ListBox。

三、列表框ListBox的事件:1、Click事件,点击事件,可以取得点击项目的值,赋值给单元格或其他控件。2、DbClick事件,双击事件,与单击事件一样,可以取得点击项目的值,赋值给单元格或其他控件。与单击的区别可能就在于,单击有点快,有时候我们都不能确定点击了正确的选项,而双击,我们可以先点击一下,看清楚点击的是哪一行,再双击。另外,我们可能会习惯性地在列表框中点来点去,但并不是要选择哪个项目,这种情况,我们用DbClick事件就比较适合,避免误点。3、其他事件......。四、总结,

1、ListBox有不少属性与方法和ComboBox相似,我觉得是不是应该ListBox在先,然后才有的ComboBox,或者说我们应该先介绍ListBox,然后再介绍ComboBox,这样可能感觉更顺当一些;

2、我们通常利用ListBox来展示一个列表,然后通过Click或DbClick事件取得点击的项目,赋值给特定工作表单元格,或其他控件。

3、我们在把ListBox作为一个输入参考时,经常会频繁地使用Visible属性。点击目标单元格,设置ListBox的visible=TRUE,显示ListBox控件,在点击ListBox完成选择输入后,设置Listbox的visible=FALSE,隐藏控件。

4、ListBox功能还算强大,但它也有局限性:

(1)没有表头,虽然说可以引用工作表的表头,但我觉得太鸡肋,也从没有用过。在【中医诊所收费系统ListBox版】中我是把表头作为第一行记录添加进去的,这样操作起来比较麻烦,在ListBox点击事件中,我们首先得判断点击的是不是第一行,如果不是,才给其他控件赋值。

(2)列数有限制,具体多少我也记不清了,懒得去查。还拿【中医诊所收费系统ListBox版】说事,由于数据明细表项目比较多,ListBox已经容纳不下了,当时也不知道有ListView控件这回事,我只好把有些字段进行了合并。后来,很多情况下,我会使用ListView来展示数据。好,今天就这样,我们下期再会。~~~~~~End~~~~~~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

 
友情链接:

Powered by 恒耀平台 @2013-2022 RSS地图 HTML地图