Выбор мыши DataGridView - PullRequest
       4

Выбор мыши DataGridView

4 голосов
/ 09 октября 2008

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

Ответы [ 3 ]

3 голосов
/ 12 октября 2008

Я нашел этот ответ на форуме Microsoft

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

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


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

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

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

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

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

1 голос
/ 10 октября 2008

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

0 голосов
/ 03 августа 2012

Я нашел одну технику, которая работает. После выбора последней ячейки (с помощью 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;
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...