【发布时间】:2009-02-12 11:11:35
【问题描述】:
我有一个 ListView,如果右键单击项目,我想显示一个上下文菜单,如果单击发生在 ListView 控件中,则显示另一个。我遇到的问题是 MouseClick 事件仅在右键单击项目时触发,而不是控件。这是什么原因造成的,我该如何解决?
【问题讨论】:
-
可以把asp.net控件的代码和html输出的代码放在页面里吗?
我有一个 ListView,如果右键单击项目,我想显示一个上下文菜单,如果单击发生在 ListView 控件中,则显示另一个。我遇到的问题是 MouseClick 事件仅在右键单击项目时触发,而不是控件。这是什么原因造成的,我该如何解决?
【问题讨论】:
使用 MouseUp 而不是 MouseClick!对于那个很抱歉。应该更努力地用谷歌搜索。
【讨论】:
您可以将 ListView 子类化以添加右键单击事件:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace MyCustomControls
{
public delegate void MyDelegate(Object sender, EventArgs e);
class MyListView : ListView
{
private static readonly object EventRightClickRaised = new object();
public MyListView()
{
//RightClick += new MyDelegate(OnRightClick);
}
public event EventHandler RightClick
{
add
{
Events.AddHandler(EventRightClickRaised, value);
}
remove
{
Events.RemoveHandler(EventRightClickRaised, value);
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
OnRightClick(EventArgs.Empty);
}
base.OnMouseUp(e);
}
protected void OnRightClick(EventArgs e)
{
EventHandler RightClickRaised = (EventHandler)Events[EventRightClickRaised];
if (RightClickRaised != null)
{
RightClickRaised(this, e);
}
}
}
}
【讨论】:
我遇到了类似的问题(想抓住控件的右键单击),解决方案是使用 MouseEnter()。应该对您想做的事情有所帮助。
【讨论】: