Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Drag-and-drop в DataGridView, CellMouseDown подавляет CellDoubleClick 
V
    Опции темы
valent_N
Дата 24.8.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 9.8.2003
Где: Рига, Латвия

Репутация: нет
Всего: 1



Здравствуйте!
У меня программа (C#, MS Visual Studio 2005 Team Suite) использует DataGridView на одной из форм. Мне нужно обеспечить следующую функциональность - (1) чтобы я мог буксировать (Drag-and-drop) из ячейки этого грида информацию о ней и о строке в целом и  (2) чтобы по двойному щелчку по ячейке грида мышкой осуществлять определенные действия (не важно какие - у меня это вызов другой формы). Я ввожу для данного грида средствами дизайнера кода обработчики событий (1) CellMouseDown (а внутри обработчика этого события вызываю метод грида DoDragDrop - для поддержки буксировки) и (2) CellDoubleClick (для вызова другой формы). Drag-and-drop - машинерия работает нормально, а вот обработчик события CellDoubleClick не вызывается вообще. Если же убираю вызов метода DoDragDrop из CellMouseDown, то и CellDoubleClick снова начинает вызываться.

ВОПРОС: Как мне обеспечить генерацию обоих вышеуказанных событий, также вызывая и DoDragDrop?

В принципе, можно получить нужную функциональность, используя и другие события, отслеживая мышинные состояния (Например, CellMouseDown и CellMouseUp, без CellDoubleClick ). Но использование обработчиков указанных событий было бы для меня более простым делом. К тому же, может быть, для этого есть простые стандартные и культурные приемы, которые я не знаю, а было бы неплохо и узнать.  Признателен за помощь.

С уважением, Валентин

PM MAIL   Вверх
valent_N
Дата 24.8.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 9.8.2003
Где: Рига, Латвия

Репутация: нет
Всего: 1



Нашел абсолютно приемлемый и надежно работающий простой выход, хоть логически и не вполне корректный:

    private void ordersDataGridView_CellMouseDown(object sender,
      DataGridViewCellMouseEventArgs e)
    {
      if ((ordersDataGridView.Rows.Count > 0) // It isn't necessary, because
                                                // because cell exists when rows count > 0.
        && (e.RowIndex >= 0))
      {
        DataGridViewRow sourceRow = ordersDataGridView.Rows[e.RowIndex];
        if (sourceRow != null)
        {
          BodyRecords mail;
          mail.fromDataGrid = this.ordersDataGridView;
          mail.docId2 = (int)sourceRow.Cells["id2Order"].Value;
          mail.Text =
            sourceRow.Cells["OutcomingOrderNoOrder"].Value.ToString();
          //////////////////////////////////////////////////////////////////////////////////////
          if (e.Clicks > 1) OpenEditForm(ordersDataGridView, e.RowIndex);
          else ordersDataGridView.DoDragDrop(mail, DragDropEffects.Copy);
          //////////////////////////////////////////////////////////////////////////////////////
        }
      }
    }

То есть, используется для обеих целей вообще один, общий, обработчик события
С уважением, Валентин

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0800 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.