在delphi中未选择任何行时,禁用listview的弹出菜单

在delphi中未选择任何行时,禁用listview的弹出菜单,delphi,Delphi,我在我的listview中有一个弹出菜单,当点击不在任何一行时,我想知道我应该在listview或PopupMenu的什么事件中这样做 提前感谢按如下方式处理弹出菜单的OnPopup事件: procedure TForm1.PopupMenu1Popup(Sender: TObject); begin if ListView1.SelCount=0 then begin Abort; end; end; 不要尝试在逻辑中使用鼠标光标,因为弹出菜单可能会从键盘调用 结果表明,您

我在我的listview中有一个弹出菜单,当点击不在任何一行时,我想知道我应该在listview或PopupMenu的什么事件中这样做


提前感谢

按如下方式处理弹出菜单的
OnPopup
事件:

procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
  if ListView1.SelCount=0 then begin
    Abort;
  end;
end;
不要尝试在逻辑中使用鼠标光标,因为弹出菜单可能会从键盘调用


结果表明,您希望根据所选内容禁用菜单上的某些项目。您应该为此使用操作,然后可以集中控制UI属性。操作可以链接到按钮、弹出菜单项、主菜单项等。您不希望编写启用和禁用所有这些单独操作的代码来解决此问题

为此使用
OnUpdate
事件

procedure TForm1.Action1Update(Sender: TObject);
begin
  Action1.Enabled := ListView1.SelCount>0;
end;
或者,有时您希望对许多操作使用相同的
OnUpdate
,这些操作将列出以下代码:

procedure TForm1.FileActionsUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled := ListView1.SelCount>0;
end;

Easy short anwser,通过名称启用或禁用一个菜单项:

YourPopup.EntryNameYouWantToDisable.Enable:=(YourBooleanCondition);
每个TMenuItem都有一个
.Enable
属性,您可以将其设置为True或False


Easy short anwser,通过位置索引启用或禁用一个菜单项:

YourPopup.Items[TheIndex].Enable:=(YourBooleanCondition);
您可以使用:
.items[TheIndex]
循环查看所有男性项目,并知道
.items.Count的金额


p.D.:他们还有
.Visible
,这样你就可以隐藏/显示你想要的弹出窗口。

当我点击列表视图时,你的建议不会显示弹出窗口,但是我想显示菜单,但菜单被禁用。请建议
对于i:=0到PopupMenu1.Items.Count-1做PopupMenu1.Items[i]。已启用:=(listview.SelCount>0)@CyprUS再次阅读你的问题,看看你是否能理解我为什么得出这个结论。@Cosmin我不推荐这种方法。行动是解决办法。