Причина, по которой создание пустого метода события DoubleClick не помогло бы, заключается в том, что он выполняется в дополнение к другим операциям, которые происходят при двойном щелчке.
Если вы посмотрите на код, сгенерированный окнами, или примеры программного добавления обработчиков событий, вы используете + =, чтобы назначить обработчик событий. Это означает, что вы добавляете этот обработчик событий в дополнение к другим, которые уже существуют, у вас может быть несколько обработчиков событий, запускаемых при сохранении события.
Мой инстинкт был бы переопределить класс DataGridView, затем переопределить метод OnDoubleClick и не вызывать базовый метод OnDoubleClick.
Однако я проверил это очень быстро и вижу некоторые интересные результаты.
Я собрал следующий тестовый класс:
using System;
using System.Windows.Forms;
namespace TestApp
{
class DGV : DataGridView
{
private string test = "";
protected override void OnDoubleClick(EventArgs e)
{
MessageBox.Show(test + "OnDoubleClick");
}
protected override void OnCellMouseDoubleClick(System.Windows.Forms.DataGridViewCellMouseEventArgs e)
{
MessageBox.Show(test + "OnCellMouseDoubleClick");
}
protected override void OnCellMouseClick(System.Windows.Forms.DataGridViewCellMouseEventArgs e)
{
if (e.Clicks == 1)
{
// Had to do this with a variable as using a MessageBox
// here would block us from pulling off a double click
test = "1 click ";
base.OnCellMouseClick(e);
}
else
{
MessageBox.Show("OnCellMouseClick");
}
}
}
}
Затем вставил это в форму Windows, добавив столбец флажка и запустив программу.
При повторном запуске двойной щелчок на флажке вызывает отображение в окне сообщения «1 щелчок по OnDoubleClick».
Это означает, что OnCellMouseClick выполняется в первой части двойного щелчка, а затем OnDoubleClick выполняется во втором щелчке.
Кроме того, к сожалению, удаление вызова базовых методов, по-видимому, не препятствует тому, чтобы флажок передавал ему щелчок.
Я подозреваю, что для того, чтобы этот подход заработал, его, возможно, следует продолжить и переопределить DataGridViewCheckBoxColumn и DataGridViewCheckBoxCell, который игнорирует двойной щелчок. Предполагая, что это работает, вы сможете отменить двойной щелчок на флажке, но разрешить его по-прежнему на других элементах управления столбца.
Я разместил ответ на другой вопрос, в котором говорится о создании пользовательских столбцов и ячеек DataGridView, на здесь .