在我的應用程序中,我有一個DataGridView
,用於配置某些選項。這個想法是,你可以在第一列輸入你想要的任何文本,但如果你右鍵點擊它會給你顯式支持的值。我需要這是一個文本框而不是下拉列表,因爲我需要支持編輯無效(或舊)配置。爲什麼我的WinForms上下文菜單不出現在鼠標所在的位置?
我想要的是用戶在字段名稱列中右鍵單擊並具有基於這是什麼類型的配置有效的上下文菜單。因此,我編寫了以下事件
private void grvFieldData_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
// If this is a right click on the Field name column, create a context menu
// with recognized options for that field
if (e.Button == MouseButtons.Right && grvFieldData.Columns[e.ColumnIndex].Name == "clmFieldName")
{
ContextMenu menu = new ContextMenu();
if (_supportedDataGrids.ContainsKey((cmbDataGrid.SelectedItem as DataGridFieldList).GridName))
{
// Loop through all the fields and add them to the context menu
List<string> fields = _supportedDataGrids[((cmbDataGrid.SelectedItem as DataGridFieldList).GridName)];
fields.Sort();
foreach (string field in fields)
menu.MenuItems.Add(new MenuItem(field));
// Make sure there is at least one field before displaying the context menu
if (menu.MenuItems.Count > 0)
menu.Show(this, e.Location, LeftRightAlignment.Right);
}
}
}
這工作「正常」,但上下文菜單出現在表單的頂部,而不是當鼠標指針。如果我將Show()
調用更改爲使用DataGridView
而不是表單,我遇到了同樣的問題,但它出現在網格的左上角,而不是鼠標所在的位置。奇怪的是,如果我將此事件更改爲MouseClick
事件(而不是CellMouseclick
事件),則一切正常,上下文菜單正好出現在鼠標指針所在的位置。這個選項的問題在於用戶可能不是右鍵單擊當前選中的單元格,這意味着當他們點擊菜單項時,所選單元格將被更改,而不是他們右鍵單擊的單元格。
有沒有人有任何暗示爲什麼用CellMouseClick
創建的上下文菜單沒有顯示在正確的位置?
嘿,我的答案會稍微複雜一些X和Y座標的添加。我希望我幾周前知道Cursor.Position!爲簡單起見+1! – Yetti 2011-02-23 17:17:00
真棒,那就像一個魅力! 'Cursor.Position'是我錯過的! – KallDrexx 2011-02-23 17:20:29