![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
valent_N |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 ). Но использование обработчиков указанных событий было бы для меня более простым делом. К тому же, может быть, для этого есть простые стандартные и культурные приемы, которые я не знаю, а было бы неплохо и узнать. Признателен за помощь. С уважением, Валентин |
|||
|
||||
valent_N |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 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); ////////////////////////////////////////////////////////////////////////////////////// } } } То есть, используется для обеих целей вообще один, общий, обработчик события С уважением, Валентин |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |