delphi中设置右键点击listview的item时,出现的PopupMenu根据不同的item而不同,但是为什么出现的都是点击的上一个的item的PopupMenu?
要怎么做才能是现在点击的ITEM的PopupMenu?
高手请教!!!

解决方案 »

  1.   

    这个问题我也遇到过解决方案
      在ListView的OnMouseMove事件中添加代码
    procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      Item: TListItem;
    begin
      Item:= ListView1.GetItemAt(x, y);
      If Item.ImageIndex = 0 then
      begin  end;
      if Item.ImageIndex = 1 then
      begin  end;
    end;
      

  2.   

    楼上说的方法也行,不过那样会消耗额外的性能,因为你鼠标移上去就要变了
    建议在 ListView的OnContextPopup事件中写代码
    比如有一个弹出菜单里面有三个菜单项目,1,2,3我要在ListView的ItemIndex中为0时,显示1,为1时显示2
    也就是说显示的菜单和ItemIndex的值对应。
    代码如下:
    procedure TForm1.ListView1ContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
     procedure SetMenuItemVisible(index: integer);
     var
       i: integer;
     begin
       for i:= 0 to PopUpMenu1.Items.Count - 1 do
       begin
         if PopupMenu1.Items.Count < i then exit;
         if i <> index then
           PopUpMenu1.Items[i].Visible := false
         else
           PopUpMenu1.Items[i].Visible := true
       end;
     end;
    begin
      SetMenuItemVisible(ListView1.ItemIndex);
    end;