Как использовать Enter вместо Tab в DataGridView? (VS 2005)

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

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

ВалГер
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 09.11.2004 (Вт) 17:34
Откуда: Псков

Как использовать Enter вместо Tab в DataGridView? (VS 2005)

Сообщение ВалГер » 09.11.2006 (Чт) 13:44

Проблема такая: хочу в DataGridView при перемещении по горизонтали использовать вместо Tab клавишу Enter.
Алгоритм вроде бы простой
Перехватываю событие от нажатия Enter и подменяю его событием нажатия на Tab (программно его создав)
Процедура такая:

Private Sub DataGridView1_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown

Dim e1 As New System.Windows.Forms.KeyEventArgs(Keys.Tab)

If e.KeyCode = Keys.Enter Then
'e.SuppressKeyPress = True ' Подавляю Enter
Me.DataGridView1_KeyDown(sender, e1) ' Рекурсивный вызов с новым событием
ElseIf e.KeyCode = Keys.Tab Then
MsgBox("Якобы нажата клавиша Таб") ' Это ловится!!!!!!
End If
End Sub

Событие отлавливается, но смещения выделенной ячейки не происходит! Почему - не пойму. Кто-нибудь может пояснить как это сделать.
Спасибо

Neco
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 06.07.2005 (Ср) 1:21

Сообщение Neco » 10.11.2006 (Пт) 23:36

ты просто вызываешь процедуру - ты не посылаешь сообщение гриду. т.е. как бы ты просто вызвал msgbox и всё.
делай либо через sendkeys (или его аналоги, если они есть в дотнете), но я сам этот способ не приемлю, поэтому советую просто указывать гриду следующую выделенную ячейку.

ВалГер
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 09.11.2004 (Вт) 17:34
Откуда: Псков

Сообщение ВалГер » 11.11.2006 (Сб) 10:45

Neco писал(а):ты просто вызываешь процедуру - ты не посылаешь сообщение гриду. т.е. как бы ты просто вызвал msgbox и всё.
делай либо через sendkeys (или его аналоги, если они есть в дотнете), но я сам этот способ не приемлю, поэтому советую просто указывать гриду следующую выделенную ячейку.


Спасибо за ответ!
Но с этого всё и началось. Я не мог обнаружить метод, который позволял бы программно сделать текущей произвольную ячейку или хотя бы сделать Next. Есть свойство Grid называется *.CurrentCell, но оно только для чтения. Если не трудно, то подскажите, пожалуйста.
Спасибо

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.11.2006 (Сб) 11:07

где-то здесь эта проблема уже обсуждалась. Я имею ввиду, как сделать активной определенную ячейку. Стоит поискать
Весь мир матрица, а мы в нем потоки байтов!

ВалГер
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 09.11.2004 (Вт) 17:34
Откуда: Псков

Сообщение ВалГер » 11.11.2006 (Сб) 12:22

Поискал в форуме на DataGridView (41 ответ) но ничего похожего не нашёл

Neco
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 06.07.2005 (Ср) 1:21

Сообщение Neco » 11.11.2006 (Сб) 15:06

DataGridView1.Rows(1).Cells(2).Selected = True

ВалГер
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 09.11.2004 (Вт) 17:34
Откуда: Псков

Сообщение ВалГер » 14.11.2006 (Вт) 16:07

Neco писал(а):DataGridView1.Rows(1).Cells(2).Selected = True


Да вроде бы нет таких свойств у DataGridView

ВалГер
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 09.11.2004 (Вт) 17:34
Откуда: Псков

Сообщение ВалГер » 14.11.2006 (Вт) 16:17

Neco писал(а):ты просто вызываешь процедуру - ты не посылаешь сообщение гриду. т.е. как бы ты просто вызвал msgbox и всё.
делай либо через sendkeys (или его аналоги, если они есть в дотнете), но я сам этот способ не приемлю, поэтому советую просто указывать гриду следующую выделенную ячейку.


Спасибо за подсказку - она навела на хорошую мысль и почти все удалось сделать. Код такой - может кому пригодится

' Нажатие на клавишу Enter вызывает переход не вниз, а вправо на одну ячейку
' То есть нажатие на Enter подменяется нажатием на клавишу Tab
Private Sub КлиентыDataGridView_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles КлиентыDataGridView.KeyDown

If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
SendKeys.Send("{Tab}") ' Работает
'SendKeys.Send(Keys.Tab)' Не работает!
End If
End Sub

Правда, почему не работает без фигурных скобок непонятно. Ну да и бог с ним!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 14.11.2006 (Вт) 16:20

Все гораздо проще. У DataGridView есть свойство по умолчанию Item, которое позволяет достучаться до нужной ячейки

Код: Выделить всё
DataGridView(i, j).Selected = True
Весь мир матрица, а мы в нем потоки байтов!


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

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

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

    TopList