Доброго всем дня!
У меня возникла проблема с обработкой события мыши.
Дело в том, что сделал свой cells DataGridViewTextButtomCell : DataGridViewTextBoxCell ,
В этом контроле мне по определенным координатам мыши в функции ниже надо прервать глобальное выполнение MouseClick.
protected override void OnMouseClick(DataGridViewCellMouseEventArgs e)
{
if ((this.DataGridView.GetCellDisplayRectangle(this.ColumnIndex, this.RowIndex, false).Width - 20) > e.X)
{
прерывание
}
else
{
base.OnMouseClick(e);
}
}
На сколько я понимаю, делегирование идет от DataGridView -> DataGridViewCell.
По сути я хочу чтобы прерывание события было именно в DataGridViewCell, чтобы не нагружать кодом DataGridView.
Если кто знает подскажите пожалуйста как изменить делегирование?
как вариант пробовал
FieldInfo eventClickField = typeof(Control).GetField("EventClick", BindingFlags.Public | BindingFlags.Instance);
EventHandler eventClick = (EventHandler)eventClickField.GetValue((Control)this.DataGridView);
this.DataGridView.Click -= (EventHandler)eventClick;
eventClickField всегда показывает null.
Не понятно в каком месте код надо прописывать? В Form? DataGridView?
также пробовал
EventDescriptor ed = TypeDescriptor.GetEvents(this.DataGridView).Find("CellMouseClick",true);
Delegate delegateT = Delegate.CreateDelegate(typeof(EventHandler), this.DataGridView, "DataGridAlex_CellMouseClick");
if(ed!=null)
ed.RemoveEventHandler(this.DataGridView, delegateT);
на второй строке вызывает исключение
Additional information: Не удается привязать целевой метод, поскольку его сигнатура или прозрачность безопасности несовместима с сигнатурой или прозрачностью безопасности типа делегата.
В этом случае как можно снять исключение?
Заранее спасибо!
http://www.sql.ru/forum/1219649/kak-otmenit-sobytie-mouse-click-datagridview