【发布时间】:2017-11-26 22:31:53
【问题描述】:
我创建了一个 ListView 和一个在我右键单击 ListView 时弹出的 ContextMenu。问题是右键单击标题时它也会弹出。我希望它只在我右键单击某个项目时弹出。
我已经尝试过有关此特定问题的其他问题的答案,但它们对我不起作用。
这是我添加的 ListView。菜单应该只显示在项目中。
这是我的代码:
public GUIMod CreateList
{
set
{
ListView1.Items.Clear();
bool latestCompatibleVersionAlreadyFound = false;
ListView1.Items.AddRange(AllVersions.Select(module =>
{
ListViewItem item = new ListViewItem();
if (module.IsCompatible(versionCriteria))
{
if (!latestCompatibleVersionAlreadyFound)
{
latestCompatibleVersionAlreadyFound = true;
item.BackColor = Color.Green;
item.ForeColor = Color.White;
}
else
{
item.BackColor = Color.LightGreen;
}
}
if (installedVersion != null && installedVersion.IsEqualTo(module.version))
{
item.Font = new Font(item.Font, FontStyle.Bold);
}
item.Text = module.version.ToString();
item.SubItems.Add(module.HighestCompatibleVersion());
return item;
}
).ToArray());
}
}
private void ListView1_MouseDown(object sender, MouseEventArgs e)
{
var item = ListView1.HitTest(e.X, e.Y).Item;
if (e.Button == MouseButtons.Right)
{
if (item != null)
{
// Show the right click menu
ContextMenuStrip1.Show(ListView1, new Point(e.X, e.Y));
if (installedVersion != null && AllVersions[item.Index].version.IsEqualTo(installedVersion))
{
// Item is darkgreen, disable option
ToolstripMenuItem1.Enabled = false;
}
else if (!AllVersions[item.Index].IsCompatible(versionCriteria))
{
// Item is white, disable option
ToolstripMenuItem1.Enabled = false;
}
else
{
// Item is installable, enabe option
ToolstripMenuItem1.Enabled = true;
}
}
}
}
private void ToolstripMenuItem1_Click(object sender, EventArgs e)
{
// Nothing yet
}
【问题讨论】:
-
您能否解释一下您所查看的答案中哪些具体不起作用?另外我建议使用 Opening 事件处理程序来取消上下文菜单的打开。
-
我尝试使用
Bounds、FocusedItem、SelectedItems,...但所有这些仍然让右键菜单显示在标题上。 -
奇怪,如果我单击 ListView 的标题,我无法获得 MouseDown 事件。
-
你能用 var item = ListView1.GetItemAt(e.X, e.Y); 代替 HitTest 吗?
-
我试过了,点击标题还是会弹出
标签: c# .net winforms listview contextmenu