Delphi ListView的用法(常用技巧)

来源:互联网 发布:最近火的网络歌曲 编辑:程序博客网 时间:2024/05/21 15:02
 
Delphi ListView的用法(常用技巧)
2008-02-03 11:37

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

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

//选中一行
       if ListView1.Selected <> nil then
       Edit1.Text := ListView1.Selected.Caption;


//        listview1.Items[Listview1.Items.Count -1].Selected := True;
//        listview1.Items[Listview1.Items.Count -1].MakeVisible(True);  
procedure TForm1.Button2Click(Sender: TObject); // 选择第一条
begin
       listview1.SetFocus;
       listview1.Items[0].Selected := True;
end;

procedure TForm1.Button1Click(Sender: TObject);       // 选择最后一条
begin
       listview1.SetFocus;
       listview1.Items[Listview1.Items.Count -1].Selected := True;
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;

//此为调用过程,可以任意指定要移动的Item,下面是当前(Selected)Item
       ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);//上移
       ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移


TListView组件使用方法

引用CommCtrl单元

procedure TForm1.Button1Click(Sender: TObject);
begin
       ListView_DeleteColumn(MyListView.Handle, i);//i是要删除的列的序号,从0开始

end;

用LISTVIEW显示表中的信息:
procedure viewchange(listv:tlistview;table:tcustomadodataset;var i:integer);
       begin
         tlistview(listv).Items.BeginUpdate;        {listv:listview名}
         try
           tlistview(listv).Items.Clear;
           with table do              {table or query名}
           begin
             active:=true;
             first;
             while not eof do
             begin
               listitem:=tlistview(listv).Items.add;
               listitem.Caption:=trim(table.fields[i].asstring);
//               listitem.ImageIndex:=8;
               next;
             end;
           end;
         finally
           tlistview(listv).Items.EndUpdate;
         end;
end;

ListView使用中的一些要点。以下以一个两列的ListView为例。
      →增加一行:
with ListView1 do
      begin
        ListItem:=Items.Add;
        ListItem.Caption:='第一列内容';
        ListItem.SubItems.Add('第二列内容');
      end;
      →清空ListView1:
ListView1.Items.Clear;
      →得到当前被选中行的行的行号以及删除当前行:
For i:=0 to ListView1.Items.Count-1 Do
      If ListView1.Items[i].Selected then      //i=ListView1.Selected.index
        begin
          ListView1.Items.Delete(i);      //删除当前选中行
        end;
当然,ListView有OnSelectItem事件,可以判断选择了哪行,用个全局变量把它赋值出来。
      →读某行某列的操作:
Edit1.Text := listview1.Items[i].Caption;      //读第i行第1列
Edit2.Text := listview1.Items[i].SubItems.strings[0];      //读第i行第2列
Edit3.Text := listview1.Items[i].SubItems.strings[1];      //读第i行第3列
以次类推,可以用循环读出整列。
      →将焦点上移一行:
For i:=0 to ListView1.Items.Count-1 Do
      If (ListView1.Items[i].Selected) and (i>0) then
        begin
          ListView1.SetFocus;
          ListView1.Items.Item[i-1].Selected := True;
        end;
不过在Delphi6中,ListView多了一个ItemIndex属性,所以只要
ListView1.SetFocus;
ListView1.ItemIndex:=3;
就能设定焦点了

原创粉丝点击