2017-08-03 44 views
0

上下文菜單彈出有點問題。 我有一個datagridview,我希望用戶能夠右鍵單擊一個單元格,並獲取上下文菜單顯示。用戶可以選擇連續或不連續的單元格。右鍵單擊並獲取上下文菜單。我已經閱讀了堆棧溢出問題並嘗試了這些建議,但都沒有爲我工作。上下文菜單不顯示在所選單元格附近。上下文菜單不顯示在發生右鍵單擊的datagridview單元格附近

我正在編寫datagridview cellmouse down事件並檢查鼠標右鍵。這裏是我的代碼:

if (e.Button == MouseButtons.Right) 
{ 
    ContextMenu m = new ContextMenu(); 
    MenuItem mi = new MenuItem("Set Online"); 
    mi.Click += setOnlineItemCell_Click; 
    m.MenuItems.Add(mi); 

    MenuItem mi2 = new MenuItem("Set Offline"); 
    mi2.Click += setOfflineItemCell_Click; 
    m.MenuItems.Add(mi2); 

    m.Show(machineGrid, new Point(e.X, e.Y)); 
} 

,因爲它會抱怨不能找到它,我不能只是一個單一的參數傳遞給Show方法(即使MSDN說你可以)。

任何幫助讓contextmenu靠近單元顯示將不勝感激。

C#,Visual Studio中2015專業版,.NET 4.5.2

回答

0

獲取上下文菜單旁邊的最後一個「選擇」細胞顯示是可行的;然而,它不會非常用戶友好。在大多數情況下,當用戶右鍵單擊某個上下文菜單時,用戶「右鍵單擊」某個上下文菜單時,「鼠標下方」會出現鼠標「指針」。你所描述的是將上下文菜單從鼠標「箭頭」所在的位置移開。我相信大多數用戶不會期待這一點。

我從你發佈的內容中猜測出...用戶選擇網格中的多個單元格,然後用戶在網格上的某處「右鍵單擊」。這將顯示一個上下文菜單(在MOUSE下面,不要將菜單移動到某個選定的單元格中)。上下文菜單將顯示「OffLine/OnLine」菜單項。然後在用戶選擇「在線/離線」之後,某些方法將使用網格中的「選定」單元作爲數據來設置單元在線或離線。這與我可以解讀你的問題的差不多。

爲了幫助,以下是一些建議。帖子中的最後一行代碼...。

m.Show(machineGrid, new Point(e.X, e.Y)); 

上面的代碼行使用UI座標將上下文菜單移動到網格X,Y值。這似乎與哪些細胞「被選擇」無關。然而,這會將上下文菜單移動到用戶右鍵單擊的某個位置......迫使用戶「追逐」上下文菜單。

最後,我質疑使用「CellMouseDown」事件來執行此上下文菜單邏輯。 DataGridView有它自己的「ContextMenuStrip」,您可以設置它。使用DataGridView’sContextMenuStrip可能是一種更簡單的方法。以下是一個DataGridView的例子,其名稱爲dgv_PlayerPool,其中ContextMenuStrip如上所述。

private void SetContexMenu() { 
    ContextMenuStrip cms = new ContextMenuStrip(); 
    cms.Items.Add("Set OnLine", null, setOnline_Click); 
    cms.Items.Add("Set OffLine", null, setOffline_Click); 
    dgv_PlayerPool.ContextMenuStrip = cms; 
} 

該項目添加上面的行,需要一個字符串顯示在菜單中,一個圖像,最後是點擊時調用的事件。

用戶選擇上下文菜單項時引發的事件。

private void setOffline_Click(object sender, EventArgs e) { 
    MessageBox.Show("SetOffLine"); 
} 
private void setOnline_Click(object sender, EventArgs e) { 
    MessageBox.Show("SetOnLine"); 
} 

希望這是有道理的。

+0

謝謝你的理由。我不知道我爲什麼這麼笨。 –

+0

很高興幫助。加入人羣;有一天實施一個想法,然後檢查相同的代碼,並對自己說......「跆拳道是我的想法!」在那裏,做到了! :-) 祝你好運! – JohnG

相關問題