Короткая версия:Можно ли расширить элемент управления DataGridView без подкласса?
Есть ли способ, я могу добавить свойства и переопределить OnMouseDown/OnMouseUp функции по контролю DataGridView, не создавая собственный элемент управления, который расширяет DataGridView?
Длинная версия (с пояснением):
Я реализую перетаскивание перемещения нескольких строк между сетками в существующем приложении. У меня есть расширенный элемент управления DataGridView с требуемой функциональностью, и он отлично перемещает строки между экземплярами этой сетки.
Это расширенная DGV коды класса:
public partial class DragDropGrid : DataGridView
{
/// <summary>
/// When set, the mouse down event and click events don't happen until the mouse button is released.
/// </summary>
public bool DelayMouseDown = false;
public int MouseDownRowIndex = -1;
protected override void OnMouseDown(MouseEventArgs e)
{
if (DelayMouseDown)
{
return;
}
base.OnMouseDown(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (DelayMouseDown)
{
base.OnMouseDown(e);
}
base.OnMouseUp(e);
}
}
Однако, у меня есть другая сетка (пользовательские UserControl), который мне нужно, чтобы быть в состоянии справиться с таким же функциональностью перетаскивания. Эта сетка представляет собой составной пользовательский элемент управления из нашего набора базового класса и имеет DataGridView вместе с множеством других вещей, которые находятся на элементе управления.
Я попытался следующие реализовать такую же функциональность как базовой DataGridView я продлен успешно, но не было удачи, получая его на работу:
Расширение моего базового класса сетки так же, как DataGridView , Этот не работает, поскольку переопределение методов MouseDown/MouseUp делает это на пользовательском UserControl , а не на DataGridView, который находится на элементе управления - поэтому нажатие на сетку не вызывает переопределенные методы.
Обновление решетки базового класса со свойствами/переопределенными методами. У этой проблемы, как указано выше; MouseDown/MouseUp - , переопределяя методы UserControl, поэтому нажатие DataGridView на
элемент управления не попадает на переопределенные методы.
Я надеялся только добавить свойства и переопределить методы на весь класс DataGridView, так что DGV на пользовательских UserControl бы подобрать функциональность наряду с другими элементами управления DataGridView.
Помощь!
Можете ли вы не добавлять обработчики непосредственно к операциям мыши? Если ваш DataGridView называется dgv, то dgv.OnCellMouseDown + = MyHandlerMethodName? – Alex
Возможно, я не был достаточно ясен в вопросе, но я не хочу подписываться на события MouseDown/MouseUp, я хочу переопределить функции OnMouseDown/OnMouseUp для сетки. Я отредактирую код расширения на вопрос, чтобы вы могли видеть, что я имею в виду. –
Извинения, я неправильно понял. С беглым взглядом, ответ Луаана выглядит как хороший подход. – Alex