首页 > 编程 > Delphi > 正文

Delphi列表框组件(TListBox)详解

2019-11-11 07:24:52
字体:
来源:转载
供稿:网友

列表框组件(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 plain copyPRocedure TForm1.FormCreate(Sender: TObject);  var    I: Integer;  begin    ListBox1.MultiSelect: = False;    Button.Caption = ’Move to Top’;    for I: = 1 to 10 do      ListBox1.Items.Add(’Item’ + IntToStr(I));  end;    procedure TForm1.Button1Click(Sender: TObject);  begin    ListBox1.Items.Move(ListBox1.ItemIndex, 0);  end;  

(6)Items 属性

列表框中所有的项都是通过Items 属性访问的,Items 属性是个典型的TStrings 对象,通过这个对象,可以在运行期操纵列表框中的项,程序示例代码如下:

[delphi] view plain copyvar    F: file;    i: integer;  begin    for i := 0 to (FileListBox1.Items.Count - 1) do    begin      try        if FileListBox1.Selected[i] then        begin          if not FileExists(FileListBox1.Items.Strings[i]) then          begin            MessgeDlg(’File: ’ + FileListBox1.Items.Strings[i] +              ’not found’, mtError, [mbok], 0);            continue;          end;          AssignFile(F, FileListBox1.Items.Strings[i]);          Reset(F, l);          ListBox1.Items.Add(IntToStr(FileSize(F)));          CloseFile(F);        end;      finally      {do something here}      end;    end;  end;  

(7)MultiSelect 属性

如果此属性设为True,表示允许同时选择多项。用户可以按住Ctrl 或Shift 键不放,用鼠标选择项目,或直接用鼠标拖拽进行选择。

(8)Sorted 属性

此属性用于设置列表框中的项是否要按字母顺序排序。对于排序的列表框,通过调用Add()或Insert()所增加的项将自动移到合适的地方。程序示例代码如下:[delphi] view plain copyprocedure TForm1.FormCreate(Sender: TObject);  begin    ListBox1.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 plain copyprocedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;    Rect: TRect; State: TOwnerDrawState);  begin       //字体用原来默认的颜色       if Odd(index) then     //当items的index为奇数时的颜色       begin          listbox1.Canvas.Brush.Color:=clwindow;          ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);       end       else         //当items的index为偶数时的颜色       begin          listbox1.Canvas.Brush.Color:=clinactivecaptiontext;          ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);       end;       if   odSelected   in   state   then        //当选定时的颜色          begin            listbox1.Canvas.Brush.Color:=clhighlight;            ListBox1.Canvas.TextRect(Rect,rect.Left,Rect.Top,ListBox1.Items[index]);          end;  end;  
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选