如何在listbox右键能选定当前行并打开菜单?

解决方案 »

  1.   

    先通过mousedown事件判断点在哪一行,存到全局变量
    后面的菜单事件直接使用此变量
      

  2.   


    procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
            i: integer;
    begin
            i := ListBox1.ItemAtPos(Point(x,y),True);
            if i>=0 then
                    ListBox1.ItemIndex := i;        if Button = mbRight then
                    PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
    end;
      

  3.   

    procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
        aPoint: TPoint;
    begin
      if Button = mbRight then
      begin
        aPoint.x := x;
        aPoint.y := y;
        ListBox1.ItemIndex := ListBox1.ItemAtPos(aPoint,true);
      end;
    end;
      

  4.   

      onMouseDown:  with TListBox(Sender) do
      begin
        ItemIndex:=ItemAtPos(Point(X,Y),True);
        if (ItemIndex<>-1) and (Button =mbRight) then
           PopupMenu:=PopupMenu1
        else
           PopupMenu:=nil;
      end;