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