Так или иначе, вам нужно съесть нажатия Enter , прежде чем они достигнут вашего контекстного меню.Очевидно, что по умолчанию используется «выбор» выделенного в данный момент элемента, когда пользователь нажимает Enter , как и любой другой элемент управления меню, известный man.
Это можно сделать, создав подкласс ContextMenuStrip
control (если вы этого еще не сделали) и переопределите его ProcessCmdKey
метод .Следите за значением keyData
, соответствующим Keys.Enter
, и, когда вы обнаружите это значение, верните True
, чтобы указать, что символ уже был обработан элементом управления, и предотвратите его передачу для дальнейшей обработки.Все остальное, конечно, вы позволите базовому классу обрабатывать, поэтому поведение других клавиш (например, клавиш со стрелками) не изменится.
Например (я только что проверил это, и он работает нормально):
public class CrazyContextMenuStrip : ContextMenuStrip
{
protected override bool ProcessCmdKey(ref Message m, Keys keyData)
{
if (keyData == Keys.Enter)
{
// Eat it when the user presses Enter to
// prevent the context menu from closing
return true;
}
// Let the base class handle everything else
return base.ProcessCmdKey(m, keyData);
}
}
И, конечно, вы можете добавить дополнительные проверки к приведенному выше коду, чтобы нажатия клавиш Enter употреблялись только тогда, когда ваш палитра цветов виден, что позволяет всем работать должным образом.остальное время,