2008-10-09 7 views
4

Я использую элемент управления DataGridView в приложении Windows Forms. Когда пользователь удерживает элемент управления для выбора нескольких элементов, он работает нормально. Теперь, когда пользователь отпускает управление и клики (и удерживает левую кнопку мыши), чтобы начать операцию перетаскивания, выбор изменяется. Как я могу остановить выбор из очистки, когда пользователь удерживает левую кнопку мыши?Выбор мыши DataGridView

ответ

3

Я нашел этот ответ в Microsoft Forum

«Чтобы перетащить несколько строк, установите DataGridView.MultiSelect в значение true и в событие DataGridView.DragDrop, удалите и вставьте все строки в коллекции DataGridView.SelectedRows».

Это blog entry также показывает, как реализовать перетаскивание на DataGridView


Но мне кажется, что вам придется наследовать от DataGridView и переопределения этих событий мышей как изменения выбора всегда получат иначе.

  • защищенных виртуальных недействительными OnCellMouseDown (DataGridViewCellMouseEventArgs е);
  • защищенная виртуальная пустота OnCellMouseUp (DataGridViewCellMouseEventArgs e);

Затем вы можете перехватить событие SelectionChanged в OnMouseDown и сделать выбор в OnMouseUp вместо этого. Вам нужно будет оставить точку вниз, чтобы вы могли выбрать правильный элемент, если это не было перетаскивание.

Вам также нужно будет сохранить список выбранных строк в событии мыши и, если он превратится в событие перетаскивания перетаскивания, вы перетащите все выбранные строки и выберите их под мышкой.

И не забудьте очистить список/копию выбранных строк при событии мыши.

1

Хороший вопрос. Хотя это может быть не так просто, как ответить, как вы, возможно, в надежде на, это должно дать вам хорошее представление на то, как идти о решении вашей проблемы: http://www.codeproject.com/KB/cpp/DataGridView_Drag-n-Drop.aspx

+0

Я видел эту статью вчера ... Желаю, чтобы выбор произошел во время «Щелчок» вместо «Мышь вниз», , У меня уже есть перетаскивание, но я просто пытался его исправить, чтобы пользователю не пришлось удерживать кнопку мыши при выборе последнего элемента перед перетаскиванием ... – joek1975 2008-10-10 14:59:19

0

Я нашел одну технику, которая работает. После выбора последней ячейки (с помощью ctrl или shift) вы начинаете перетаскивать, прежде чем отпускать кнопку мыши, выбор не изменится. Затем по капле вы можете использовать следующий метод, чтобы получить список выбранных ячеек:

private SC.ArrayList selectedCells() 
    { 
     SC.ArrayList cellsList = new SC.ArrayList(); 
     Int32 selectedCellCount = dataViewImages.GetCellCount(DataGridViewElementStates.Selected); 
     if (selectedCellCount > 0) 
     { 
     for (int i = 0;i < selectedCellCount; i++) { 
      int cell = dataViewImages.SelectedCells[i].RowIndex*ShowImages.NumColumnsForWidth() + dataViewImages.SelectedCells[i].ColumnIndex; 
      cellsList.Add(cell); 
     } 
     cellsList.Sort(); 
     return cellsList; 
     } 
     else 
     return null; 
    } 
Смежные вопросы