В моем приложении у меня есть DataGridView
, который предназначен для настройки некоторых параметры. Идея состоит в том, что вы можете ввести любой текст, который хотите, в первый столбец, но если вы щелкните правой кнопкой мыши, он предоставит вам явно поддерживаемые значения. Мне нужно, чтобы это было текстовое поле, а не раскрывающийся список, потому что мне нужно поддерживать редактирование недопустимых (или старых) конфигураций.
Я хочу, чтобы пользователь щелкнул правой кнопкой мыши в столбце имени поля и получил контекстное меню, действительное в зависимости от типа конфигурации. Поэтому я закодировал следующее событие
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
, не отображаются в нужном месте?