【Delphi 基础知识 29】ListBox控件的详细使用

在Delphi中,TListBox是一个常用的控件,用于显示项目列表。以下是TListBox的一些常见用法:

  1. 添加项目:

    使用 ListBox.Items.Add 方法可以向列表框中添加项目。例如:

    pascal 复制代码
    ListBox1.Items.Add('Item 1');
    ListBox1.Items.Add('Item 2');
  2. 删除项目:

    使用 ListBox.Items.Delete 方法可以删除指定位置的项目。例如:

    delphi 复制代码
    ListBox1.Items.Delete(0); // 删除第一个项目
  3. 清空列表:

    使用 ListBox.Items.Clear 方法可以清空列表框中的所有项目。例如:

    delphi 复制代码
    ListBox1.Items.Clear;
  4. 获取所选项目:

    你可以通过 ListBox.ItemIndex 属性获取用户当前选择的项目的索引。然后,你可以使用该索引来获取所选项目的值。例如:

    delphi 复制代码
    if ListBox1.ItemIndex <> -1 then
      ShowMessage('Selected item: ' + ListBox1.Items[ListBox1.ItemIndex]);
  5. 多选模式:

    ListBox可以配置为允许多选。你可以通过设置 ListBox.MultiSelect 为True启用多选模式。在多选模式下,可以使用 ListBox.Selected[] 属性来检查或设置所选项目。例如:

    delphi 复制代码
    ListBox1.MultiSelect := True;
    // 设置选中项
    ListBox1.Selected[0] := True;
    ListBox1.Selected[2] := True;
  6. 事件处理:

    ListBox具有多种事件,你可以利用这些事件来响应用户操作,如点击、双击、选择等。常见的事件包括 OnClickOnDblClickOnSelect 等。

  7. 自定义项目样式:

    你可以通过设置 ListBox.Style 属性为 lbOwnerDrawFixedlbOwnerDrawVariable 来自定义项目的外观。然后,在 OnDrawItem 事件中绘制每个项目的外观。

  8. item的拖拽:

    首先确保ListBox的 DragMode 属性设置为 dmAutomatic,以便启用自动拖拽模式。

    javascript 复制代码
    procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
      var
      Idx: Integer;
      Pos: TPoint;
    begin
      Accept := False;
      if Sender is TListBox then
      with Sender as TListBox do
      begin
        Pos.X := X;
        Pos.y := Y;
        Idx := ItemAtPos(Pos, True);
        if (Idx > -1) and (idx <> ItemIndex) then
          Accept := True;
      end;
    end;
    
    procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      Idx: Integer;
      Pos: TPoint;
    begin
      if Sender is TListBox then
      begin
        with Sender as TListBox do
        begin
          Pos.X := X;
          Pos.y := Y;
          Idx := ItemAtPos(Pos, True);
          Items.Move(ItemIndex, Idx);
          ItemIndex := Idx;
        end;
      end;
    end;
  9. item的上下移动:

    javascript 复制代码
    procedure LbMoveItemUp(AListBox: TListBox);
    var
      CurrIndex: Integer;
    begin
      with AListBox do
        if ItemIndex > 0 then
        begin
          CurrIndex := ItemIndex;
          Items.Move(ItemIndex, (CurrIndex - 1));
          ItemIndex := CurrIndex - 1;
        end;
    end; // Move an item down
    
    procedure LbMoveItemDown(AListBox: TListBox);
    var
      CurrIndex, LastIndex: Integer;
    begin
      with AListBox do
      begin
        CurrIndex := ItemIndex;
        LastIndex := Items.Count;
        if ItemIndex <> -1 then
        begin
          if CurrIndex + 1 < LastIndex then
          begin
            Items.Move(ItemIndex, (CurrIndex + 1));
            ItemIndex := CurrIndex + 1;
          end;
        end;
      end;
    end;
    
    procedure TForm1.Button6Click(Sender: TObject);
    begin
      LbMoveItemUp(ListBox1);
    end;
    
    procedure TForm1.Button7Click(Sender: TObject);
    begin
      LbMoveItemDown(ListBox1);
    end;

Listbox使用Demo源码下载

相关推荐
2603_965148114 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
知无不研7 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
cfm_29147 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
C++ 老炮儿的技术栈8 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_448011168 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
小白学大数据9 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
zlinear数据采集卡9 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Poo_Chai9 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库
瑞码空间9 小时前
Java 图形界面(GUI)完整知识点手册
java·开发语言·图形界面·swing
小努蛋10 小时前
linux编译openresty异常问题,lua_cjson.c:706:5: 错误: ‘for‘ 循环初始化声明只在 C99 或 C++ 模式下允许
开发语言·lua·openresty