最近使用ListView遇到一个问题;首先我给ListView的PopupMenu设置了一个PopupMenu控件(PopupMenu01);
然后在 ListView的 ColumnRightClick(标题的右键事件中)加入:var
p : TPoint;
begin
p := TListView(Sender).ClientToScreen(Point);
PopupMenu02.Popup(p.X,p.Y);
end;但是在实际的效果中,在ListView在vsReport模式下在标题点击右键之后,在弹出的右键菜单中
点击一项,原本在ListView设置的PopupMenu01也会弹出来;后来试了一个方法,把ListView的PopupMenu属性去掉,改为在ListView的MouseUp事件来实现
对应的右键菜单功能,代码如下:var
p : TPoint;
begin
if Button = mbRight then
begin
p := TListView(Sender).ClientToScreen(Point(X,Y));
PopupMenu01.Popup(p.X,p.Y);
end;
end;按上面的方式修改后,开始的问题可以解决,但是新的问题又出现了,就是我点击ListItem之后,右键
弹不出来了,只有选中空白的地方点击鼠标右键才会有右键菜单;问题就是上面描述的,请大家帮忙支招,谢谢;
然后在 ListView的 ColumnRightClick(标题的右键事件中)加入:var
p : TPoint;
begin
p := TListView(Sender).ClientToScreen(Point);
PopupMenu02.Popup(p.X,p.Y);
end;但是在实际的效果中,在ListView在vsReport模式下在标题点击右键之后,在弹出的右键菜单中
点击一项,原本在ListView设置的PopupMenu01也会弹出来;后来试了一个方法,把ListView的PopupMenu属性去掉,改为在ListView的MouseUp事件来实现
对应的右键菜单功能,代码如下:var
p : TPoint;
begin
if Button = mbRight then
begin
p := TListView(Sender).ClientToScreen(Point(X,Y));
PopupMenu01.Popup(p.X,p.Y);
end;
end;按上面的方式修改后,开始的问题可以解决,但是新的问题又出现了,就是我点击ListItem之后,右键
弹不出来了,只有选中空白的地方点击鼠标右键才会有右键菜单;问题就是上面描述的,请大家帮忙支招,谢谢;
在PopupMenu1Popup(Sender: TObject);事件中根据不同的需要设置每个菜单项TMenuItem的visible属性
首先在ListView的 ColumnRightClick(标题的右键事件中)加入:var
p : TPoint;
begin
p := TListView(Sender).ClientToScreen(Point);
PopupMenu02.Popup(p.X,p.Y);
PopupMenu01.Tag := 1;
end;在ListView的 MouseMove 事件恢复对应的标志
begin
PopupMenu01.Tag := 0;
end;在对应PopupMenu01 的OnPopup 事件中 判断对应的标志信息:if PopupMenu01.Tag = 1 then
Abort;通过上面的方法就可以实现,不过有点麻烦,不知道是否还有其他更好的方法来处理;