要用遍历吗
for i:=1 to listview1.items.count
  if listview1.items.item[i].selected
     ......这样的话要是有一万条项目我不是要做一万次吗有没有什么更好的方法?

解决方案 »

  1.   

    在ListView的OnSelectItem事件里填写代码:
    procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    begin
      if selected then Memo1.Lines.Add(Item.Caption);
    end;
      

  2.   

    //树里面的节点就是你的ListView所选择的行
    type
      PMapNode = ^TMapNode;
      TMapNode = record
        fCode:String;
        fName:String;//名称
        fPay :String;
      end;type
      TForm1 = class(TForm)
        ListView1: TListView;
        TreeView1: TTreeView;
        procedure FormCreate(Sender: TObject);
        procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
          Selected: Boolean);
      private
        { Private declarations }
        function FindTreeNodeOnCode(Tree:TTreeNodes;SearchString:String):Integer;
        procedure AddChildNode(RootNode:TTreeNode;fName,fPay,fCode:String);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{***************************************************************
     * 方 法 名  : FindTreeNodeOnCode
     * 编写目的   :
     * 作    者  : 黄仁光
     * 参    数  : Tree:TTreeNodes;SearchString:String
     * 结    果  : Integer
     * 编写日期   :2002年12月28日
     ****************************************************************}
    function TForm1.FindTreeNodeOnCode(Tree:TTreeNodes;SearchString:String):Integer;
    var
      CurItem:TTreeNode;
      Title:String;
    begin
      Result := -1;
      CurItem := Tree.GetFirstNode;
      while CurItem <> nil do
      begin
        Title := CurItem.Text;
        if AnsiCompareStr(Title,SearchString) = 0 then
        begin
          Result := CurItem.AbsoluteIndex;
          break;
        end;
        CurItem := CurItem.GetNext;
      end;
    end;procedure TForm1.AddChildNode(RootNode:TTreeNode;fName,fPay,fCode:String);
    var
      ChildNode:TTreeNode;
      pMapChild:PMapNode;
    begin
      new(pMapChild);
      pMapChild^.fName := fName;
      pMapChild^.fPay := fPay;
      pMapChild^.fCode := fCode;
      ChildNode := TreeView1.Items.AddChildObject(RootNode,fCode,pMapChild);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      //向树中添根节点
      TreeView1.Items.AddChild(nil,'根节点');
    end;procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    var
      NodeIndex:Integer;
    begin
      NodeIndex := FindTreeNodeOnCode(TreeView1.Items,Item.Caption);
      if NodeIndex = -1 then//如果没有找到
      begin
        AddChildNode(TreeView1.Items[0],Item.SubItems[0],Item.SubItems.Strings[1],Item.Caption);
        TreeView1.Items[0].Expand(true);
      end
      else//如果找到
      begin
        TreeView1.Items.Delete(TreeView1.Items[NodeIndex]);
      end;
    end;end.
      

  3.   

    关闭时有一点小Bug,希望你自己去改正,谢谢。