【Delphi 基础知识 28】ListView控件的详细使用

控件设置

  • ViewStyle 设为vsReport
  • ReadOnly 设为True
  • GridLines 设为True
  • RowSelect 设为True
    在这里插入图片描述

增加数据

var
  i : integer;
begin
  //增加
  i := ListView1.Items.Count;
  with ListView1.Items.Add do
  begin
    Caption:= IntToStr(i);
    SubItems.Add('第 '+IntToStr(i)+' 行');
    SubItems.Add('第三列内容');
  end;
end;

删除选中的行

var
  i : integer;
begin
  for i:=ListView1.Items.Count-1 downto 0 do  //直接用to会报错
  if ListView1.Items[i].Selected then //i=ListView1.Selected.index
  begin
    ListView1.Items.Delete(i); //删除当前选中行
  end;
end;

按标题删除

var
  i : integer;
begin
  //按标题删除
  for i:=ListView1.Items.Count-1 downto 0 Do
  if ListView1.Items[i].Caption = Edit1.Text then
  begin
    ListView1.Items.Item[i].Delete(); //删除当前选中行
  end;
end;

读取某行某列内容

begin
  Edit1.Text := listview1.Items[0].Caption; //读第i行第1列
  Edit2.Text := listview1.Items[0].SubItems.strings[0]; //读第i行第2列
  Edit3.Text := listview1.Items[0].SubItems.strings[1]; //读第i行第3列
end;

修改某行某列内容

begin
  //必须原先存在数据,才能去修改,可以用Add('')新建数据初始化
  listview1.Items[0].Caption:= Edit1.Text;
  listview1.Items[0].SubItems.strings[0]:= Edit2.Text;
  listview1.Items[0].SubItems.strings[1]:= Edit3.Text;
end;

清空内容

begin
  ListView1.Clear;
end;

设置焦点

//类似手动选中某一行
begin
  ListView1.SetFocus;
  ListView1.ItemIndex:=3;
end;

上下移动条目

procedure ListViewItemMoveUpDown(lv: TListView; Item: TListItem; MoveUp, SetFocus: Boolean);
var
  DestItem: TListItem;
begin
  if (Item = nil) or ((Item.Index - 1 < 0) and MoveUp) or ((Item.Index + 1 >= lv.Items.Count) and (not MoveUp)) then
    Exit;
  lv.Items.BeginUpdate;
  try
    if MoveUp then
      DestItem := lv.Items.Insert(Item.Index - 1)
    else
      DestItem := lv.Items.Insert(Item.Index + 2);
    DestItem.Assign(Item);
    lv.Selected := DestItem;
    Item.Free;
  finally
    lv.Items.EndUpdate;
  end;
  if SetFocus then
    lv.SetFocus;
  DestItem.MakeVisible(False);
end;

procedure TForm3.Button8Click(Sender: TObject);
begin
  ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);//上移
end;

procedure TForm3.Button9Click(Sender: TObject);
begin
  ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移
end;

读出选中行信息

var
  i: integer;
begin
  if ListView1.Selected <> nil then
  begin
    memo1.Lines.Add('Caption:' + ListView1.Selected.Caption);
    for I := 0 to ListView1.Selected.SubItems.Count-1 do
    begin
      memo1.Lines.Add('SubItems:' + ListView1.Selected.SubItems[i]);
    end;
  end;
end;

点击正反排序

m_bSort: boolean = false; // 控制正反排序的变量

function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
var
  txt1, txt2: string;
  Num1, Num2: Integer;
begin
  if ParamSort <> 0 then  //点击subItems
  begin
    try
      txt1 := Item1.SubItems.strings[ParamSort - 1];
      txt2 := Item2.SubItems.strings[ParamSort - 1];
      if m_bSort then
      begin
        Result := CompareText(txt1, txt2);
      end else begin
        Result := -CompareText(txt1, txt2);
      end;
    except
    end;
  end
  else   //点击caption
  begin
    txt1:= Item1.Caption;
    txt2:= Item2.Caption;
    // 将字符串转换为数字
    Num1 := StrToIntDef(txt1, MaxInt);
    Num2 := StrToIntDef(txt2, MaxInt);
    // 进行数字比较
    Result := Num1 - Num2;
    //如果都不是数字安装默认排序法排序
    if (Num1 = MaxInt) and (Num2 = MaxInt) then
      Result := AnsiCompareText(txt1, txt2);
    if m_bSort then
    begin
      Result:= -Result;
    end
  end;
end;

procedure TForm3.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
  ListView1.CustomSort(@CustomSortProc, Column.Index);
  m_bSort := not m_bSort;
end;

每行item显示不一样的颜色

添加AdvancedCustomDrawItem事件

procedure TForm3.ListView1AdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem;
  State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
  if Odd(Item.Caption.ToInteger)  then
  begin
    Sender.Canvas.Font.Color := clWindowText;
    Sender.Canvas.Font.Name := '宋体';
    Sender.Canvas.Font.Size := 12;
    Sender.Canvas.Brush.Color := $d0d0f2;
  end
  else
  begin
    Sender.Canvas.Font.Color := clWindowText;
    Sender.Canvas.Font.Name := '宋体';
    Sender.Canvas.Font.Size := 12;
    Sender.Canvas.Brush.Color := $e6c8c8;
  end
end;

最后上个Demo合照,点击下载Demo源码
在这里插入图片描述

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南通DXZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值