C#Winform项目当点击离开仍然触发上下文菜单
我有一个contextMenu的dataGridView。简单地说,一切都按照我想要的方式工作,除了上下文菜单选择会触发,即使我不想要它(当我点击时)。 例如我右键单击我的dataGridView我看到我的选择。如果我选择它,它会触发一个MouseClick事件并执行我想要的操作。但是,如果我点击它,它会触发MouseClick事件。
我在一个OnMouseUp事件中以几种不同的方式尝试过它,但同样的事情正在发生。在下面的代码中你会注意到一些额外的“if”,基本上我尝试了一些让MouseClick不必触发的事情(最终我相信它只是在做冗余工作)。
在下面的代码请注意下面这个:MessageBox.Show(“这里出事了!”);
代码:
private void dgvMyDataGridView_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
currentMouseOverCol = dgvMyDataGridView.HitTest(e.X, e.Y).ColumnIndex;
currentMouseOverRow = dgvMyDataGridView.HitTest(e.X, e.Y).RowIndex;
ContextMenu m = new ContextMenu();
if (currentMouseOverRow >= 0 && currentMouseOverCol == 1)
{
dgvMyDataGridView.CurrentRow.Cells[0].Value.ToString())));
m.MenuItems.Add(new MenuItem(string.Format("Do something with this row")));
}
m.Show(dgvMyDataGridView, new Point(e.X, e.Y));
}
DataGridView.HitTestInfo hitTestInfo;
hitTestInfo = dgvMyDataGridView.HitTest(e.X, e.Y);
if (hitTestInfo.Type == DataGridViewHitTestType.Cell && hitTestInfo.ColumnIndex == 1 && currentMouseOverRow >= 0 && currentMouseOverCol == 1)
{
MessageBox.Show("something goes wrong here!");
// Code to open a new form page - this all works.
}
}
缺少什么我要告诉我的应用程序,当我点击即可不触发?
感谢,
〜克里斯
不要这样创建上下文菜单,创建一个静态上下文菜单,然后设置'dgvMyDataGridView.ContextMenu = m;' – 2012-07-25 17:02:31
@HansZ他会希望它是静态的吗?有可能(可能不是他的情况)可以多次实例化表单,然后单击任何表单上的菜单将触发所有附加的处理程序,对吗?会不会只是一个正式的成员变量的形式要走的路?或者甚至为DataGridView设置ContextMenu属性,然后重新使用它? – 2012-07-25 18:46:32
诚实地说,我不会重新记住为什么我动态创建它。我相信这与我必须创建一个动态构建的ContextMenu(我有一个程序员的头脑,但抱歉,我不像你们那样有经验)的认识有关。无论如何,我是如此亲密,我不想重做一切,所以我坚持下去,并相信我解决了我的问题。我需要做的是通过contextMenu创建一个事件处理程序,而不是使用dgvMyDataGridView_MouseClick事件。感谢您的所有输入。 – Chris 2012-07-25 19:53:10