列表框组件(TListBox)
此组件为一个标准的Windows 列表框组件,它用于显示一系列的列表,用户可以选择、加入、删除或修改其中的项目。
1.TLlistBox 组件的典型用法
在Windows 应用程序中,经常要用到列表框。列表框能够在一个可翻滚的窗口中列出多个项让用户选择。例如在Delphi 的IDE 中,当使用“View”菜单上的“Component List”命令时,Delphi 将列出VCL 中的所有组件。程序中主要利用Items 属性进行各种项目的控制,例如用Items.Strings[]获取某个选项的内容,Items.Add()和Items.Delete()增加或删除选项条目。通过ItemIndex 属性指定或者获取当前选项。
2.TListBox 组件的重要属性
·Columns 列表框的栏数·ExtendedSelect 此属性用于设置是否允许使用Shift 键和Ctrl 键同时选择多个项·IntegralHeight 列表框的高度总是列表框中项的高度的整数倍·ItemHeight 此属性用于设置列表框中每一项的高度·ItemIndex 此属性用于设置返回列表框中被选择的项的序号·Items 列表框中所有的项都是通过Items 属性访问的·MultiSelect 允许同时选择多项·SelCount 返回当前选择的项的个数·Selected 此属性用于判断指定的项是否被选择·Sorted 此属性用于设置列表框中的项是否要按字母顺序排序·Style 此属性用于设置列表框的风格下面介绍程序中TListBox 组件常用的属性。
(1)Columns 属性
此属性默认值为0,列表框以单栏显示,如果内容太多,列表框将自动加上一个垂直方向的滚动条。如果此属性设为大于0 的值,列表框将首先填满一栏。如果在一栏中不能完全显示,就显示在第2 栏、第3 栏,依次类推,但屏幕上最多只显示Columns 属性设置的栏数。如果此属性设为2,屏幕上只显示两栏,如果实际内容不止两栏,将自动加上一个水平方向的滚动条。
(2)ExtendedSelect 属性
此属性用于设置是否允许使用Shift 键和Ctrl 键同时选择多个项,前提是MultiSelect 属性必须设为True,如果ExtendedSelect 属性设为True,当用户按下并保持住Shift 键时就可以选择多个连续的项,按下并保持住Ctrl 键就可以选择多个项(不一定连续)。
(3)IntegralHeight 属性
如果此属性设为True,且Style 属性设为IsOwnerDrawFixed 时,列表框的高度将自动调整到列表框中项的高度的整数倍。如果此属性设为False,列表框的最后一项可能不能完整地显示,因为列表框的高度不一定正好是ItemHeight 属性的整数倍。
(4)ItemHeight 属性
当Style 属性设为IsOwnerFixed(用户自定义)时,此属性用于设置列表框中每一项的高度。如果IntegralHeight 属性设为True,整个列表框的高度将随着ItemHeight 属性的值自动调整。如果Style属性设为IsStandard 或IsOwnerDrawVariable,ItemHeight 属性将无意义。
(5)ItemIndex 属性
此属性用于设置返回列表框中被选择的项的序号。如果MultiSelect 属性设为True,并且用户选择了多个项,此属性返回其中有输入焦点的项的序号。程序示例代码如下:
[delphi]view plaincopyPRocedureTForm1.FormCreate(Sender:TObject);varI:Integer;beginListBox1.MultiSelect:=False;Button.Caption=’MovetoTop’;forI:=1to10doListBox1.Items.Add(’Item’+IntToStr(I));end;procedureTForm1.Button1Click(Sender:TObject);beginListBox1.Items.Move(ListBox1.ItemIndex,0);end;
(6)Items 属性
列表框中所有的项都是通过Items 属性访问的,Items 属性是个典型的TStrings 对象,通过这个对象,可以在运行期操纵列表框中的项,程序示例代码如下:
[delphi]view plaincopyvarF:file;i:integer;beginfori:=0to(FileListBox1.Items.Count-1)dobegintryifFileListBox1.Selected[i]thenbeginifnotFileExists(FileListBox1.Items.Strings[i])thenbeginMessgeDlg(’File:’+FileListBox1.Items.Strings[i]+’notfound’,mtError,[mbok],0);continue;end;AssignFile(F,FileListBox1.Items.Strings[i]);Reset(F,l);ListBox1.Items.Add(IntToStr(FileSize(F)));CloseFile(F);end;finally{dosomethinghere}end;end;end;
(7)MultiSelect 属性
如果此属性设为True,表示允许同时选择多项。用户可以按住Ctrl 或Shift 键不放,用鼠标选择项目,或直接用鼠标拖拽进行选择。
(8)Sorted 属性
此属性用于设置列表框中的项是否要按字母顺序排序。对于排序的列表框,通过调用Add()或Insert()所增加的项将自动移到合适的地方。程序示例代码如下:
[delphi]view plaincopyprocedureTForm1.FormCreate(Sender:TObject);beginListBox1.Items.Add(’Item2’);ListBox1.Items.Add(’Item3’);ListBox1.Items.Add(’Item1’);ListBox1.Items.Add(’Item4’);end;
(9)Style 属性
此属性用于设置列表框的风格。它设定了如下3 个用户可选值。• lbStandard:每一个项是一个字符串,每一项高度相同。• lbOwnerDrawFixed:项不一定是字符串,也可以是图像,项的高度是由ItemHeight 属性指定。在显示每一项之前都会触发OnDrawItem 事件。• lbOwnerDrawVariable:项不一定是字符串,也可以是图像,项的高度可以不同。在显示每一项之前都要触发两个事件,第1 个是OnMeasureItem 事件,让程序指定每一项的高度,第2 个是OnDrawItem 事件,让程序画出每一项。
3.TListBox 组件的重要事件
·OnDrawItem 如果Style 属性设为lbOwnerDrawFixed 或lbOwnerDrawVariable,且列表框的项需要重画时,触发该事件·OnMeasureItem 如果Style 属性设为lbOwnerDrawVariable,且列表框的项需要重画时,触发该事件
4.TListBox 组件的重要方法
TListBox 组件在程序中常用的方法是Clear,它的功能是将列表框内所有的选项删除。
Listbox中的item如何根据内容的不同而显示不同的颜色
1、ListBox1 的 Style 属性改为 lbOwnerDrawVariable2、在ListBox的OnDrawItem事件裡,根据item的值,改变Canvas属性即可。
例如:
[delphi]view plaincopyprocedureTForm1.ListBox1DrawItem(Control:TWinControl;Index:Integer;Rect:TRect;State:TOwnerDrawState);begin//字体用原来默认的颜色ifOdd(index)then//当items的index为奇数时的颜色beginlistbox1.Canvas.Brush.Color:=clwindow;ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);endelse//当items的index为偶数时的颜色beginlistbox1.Canvas.Brush.Color:=clinactivecaptiontext;ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);end;ifodSelectedinstatethen//当选定时的颜色beginlistbox1.Canvas.Brush.Color:=clhighlight;ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);end;end;