DoubleClick на DataGrid

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

DoubleClick на DataGrid

Сообщение Lobo » 07.05.2004 (Пт) 17:07

Помогите, никак не могу найти событие DataGrid или какого-нибудь его объекта, которое бы отвечало на двойной клик по ячейке. Также может подскажете, как в DataGrid по клику выделять всю строку. :?: :oops:
Изображение Вопросы - рёбрами!

Aqualung
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 27.02.2004 (Пт) 23:56

Сообщение Aqualung » 25.05.2004 (Вт) 19:53

Насколько я знаю, для этого нужно использовать либо ButtonClick - тогда выдается номер столбца, а строка становится текущей; либо MouseUp/MouseDown - выдаются координаты клика. Зная высоту строк и ширину столбцов, а, также, номер первой строки, можно определить ячейку.

Думаю, первый вариант - надежнее.

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 27.05.2004 (Чт) 15:33

ButtonClick - это совсем из другой оперы, а в MouseDown/MouseUp можно воспользоваться методом DataGrid.HitTest, который сразу даст строку/колонку. Но! мне нужно не определить координаты, а словить событие, и не просто Click, а DoubleClick. Одноимённое же событие датагрида реагирует на двойной щелчок на заголовке столбца или колонки, но почему-то никак не на ячейке!
Изображение Вопросы - рёбрами!

Aqualung
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 27.02.2004 (Пт) 23:56

Сообщение Aqualung » 27.05.2004 (Чт) 17:18

Хм... Очень хитрозадо: завести таймер и засекать время между последним и предпоследним кликами. Если оно меньше, скажем, 100 миллисекунд - считать двойным кликом.

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 28.05.2004 (Пт) 16:44

Или я спросил ужасную глупость, и все стыдливо отворачиваются, или эта задача не по зубам нашим гуру. И в то, и в другое не хочется верить. Поэтому попробую переформулировать вопрос.

Есть данные в DataGrid. При двойном щелчке на ячейке грида нужно выполнить некую операцию над этой строкой. Проблема в том, чтобы получить доступ к этому событию - двойному щелчку на ячейке грида.

Вроде бы, простая задача? :?: :roll:
Последний раз редактировалось Lobo 28.05.2004 (Пт) 17:56, всего редактировалось 1 раз.
Изображение Вопросы - рёбрами!

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 28.05.2004 (Пт) 17:15

Lobo писал(а):Или я спросил ужасную глупость, и все стыдливо отворачиваются, или эта задача не по зубам нашим гуру. И в то, и в другое не хочется верить. Поэтому попробую переформулировать вопрос.


Спросил ты очень понятно, но т.к. этот вопрос не совсем очевиден, тебе не бросились все отвечать..

вообще используя MSDN и немного фантазии я придумал такой метод: При каждом событии MouseDown мы записываем в некоторые переменные данные о том, был ли счелчек на ячейке (или нет), и если был на ячейке, то записываем строку, ну и на всякий случай столбец. Далее в событии DoubleClick проверяем, был ли счелчек на ячейке, если да, то делаем с ней что-нить, если не на ячейке, ничего не делаем...

итак, вот тебе кусок кода, который должен тебе помочь, его вставляй в обработку события MouseDown
MSDN писал(а): Dim myGrid As DataGrid = CType(sender, DataGrid)
Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
hti = myGrid.HitTest(e.X, e.Y)
Dim message As String = "You clicked "

Select Case hti.Type
Case System.Windows.Forms.DataGrid.HitTestType.None
message &= "the background."

Case System.Windows.Forms.DataGrid.HitTestType.Cell
message &= "cell at row " & hti.Row & ", col " & hti.Column

Case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader
message &= "the column header for column " & hti.Column

Case System.Windows.Forms.DataGrid.HitTestType.RowHeader
message &= "the row header for row " & hti.Row

Case System.Windows.Forms.DataGrid.HitTestType.ColumnResize
message &= "the column resizer for column " & hti.Column

Case System.Windows.Forms.DataGrid.HitTestType.RowResize
message &= "the row resizer for row " & hti.Row

Case System.Windows.Forms.DataGrid.HitTestType.Caption
message &= "the caption"

Case System.Windows.Forms.DataGrid.HitTestType.ParentRows
message &= "the parent row"
End Select

MsgBox(message)


скажи, если не разберешься, напишу полный код... ну а если разберешься, то пости сюда весь код, пусть люди пользуються...

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 28.05.2004 (Пт) 17:52

Погоди, ты что, предлагаешь сначала щелкнуть на ячейке (и словить MouseDown), а потом сделать двойной щелчок на заголовке строки (и словить DoubleClick)? Что-то не очень удобно для пользователя, то же самое, что кнопку нажать. Штука-то в том, что событие DoubleClick датагрида реагирует на двойной щелчок на заголовке столбца или колонки, но почему-то никак не на ячейке!

Свойством HitTestInfo.Type обязательно воспользуюсь, спасибо!
Изображение Вопросы - рёбрами!

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 28.05.2004 (Пт) 19:19

Извиняюсь, погорячился... счас чего-нить ещё подумаю...

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 28.05.2004 (Пт) 20:14

посмотри информацию вот по этой ссылочке:

http://www.syncfusion.com/FAQ/WinForms/ ... .asp#q869q

там есть краткое описание на англ. + пример, из которого можно всё понять (если конечно постараться)...

конечно реализация получаеться через то место, которым... ну вообщем это DataGrid... не знаю, как он вообще попал в VS.NET, в которой вроде как всё остальное очень правильное :)

а вообще, постараюсь в ближайшие пару дней написать по этому поводу подробный пример в "Популярных вопросах", так что если найдешь ещё чего-то полезного, пости сюда.

А вообще, если что-то будет непонятно, спрашивай, постараюсь объяснить...

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 31.05.2004 (Пн) 16:44

Спасибо! Примерчик работает как надо, использую его. Но реализация, действительно, ещё та... :)
Изображение Вопросы - рёбрами!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList