none
VS2010 "Enter"->"Tab" RRS feed

  • Вопрос

  • Всем привет!

    Как сделать так,  чтобы по клавише  "Enter" курсор в DataGridView переходил не вниз, а вправо на соседнее поле, как по "Tab".

    Дело в том, что в режиме редактирования ячейки событие "KeyDown" не ловится

    15 июня 2011 г. 7:39

Ответы

Все ответы

  •  if (e.KeyCode == Keys.Enter)
                {
                    SendKeys.Send("{TAB}");
                    e.Handled = true;
                    e.SuppressKeyPress = true;
                }
    ОТЕЦъ
    15 июня 2011 г. 8:11
    • Помечено в качестве ответа Abolmasov Dmitry 28 июня 2011 г. 14:45
    15 июня 2011 г. 10:05
  • doomspace -а в каком событии?

    Abolmasov Dmitry-что-то не работает. Я переписал (конвертировал) в Visual Basic.Net но не подхватывается

    Public Class MyDataGridView

    Inherits DataGridView

     

    Protected Overrides Function ProcessDataGridViewKey(e As KeyEventArgs) As Boolean

       If e.KeyCode = Keys.Enter Then

             Me.ProcessTabKey(e.KeyData)

            Return True

            End If 

            Return MyBase.ProcessDataGridViewKey(e)

    End Function

    Protected Overrides Function ProcessDialogKey(keyData As Keys) As Boolean

          If keyData = Keys.Enter Then

                Me.ProcessTabKey(keyData)

                 Return True

           End If

           Return MyBase.ProcessDialogKey(keyData)

    End Function

    End Class

    15 июня 2011 г. 14:49
  • Вроде бы все правильно вы написали (по Enter - переход идет вправо):

    Public Class MyDataGridView
      Inherits DataGridView
    
      Protected Overrides Function ProcessDataGridViewKey(e As System.Windows.Forms.KeyEventArgs) As Boolean
        If (e.KeyCode = Keys.Enter) Then
          Me.ProcessTabKey(e.KeyData)
          Return True
        End If
        Return MyBase.ProcessDataGridViewKey(e)
      End Function
    
      Protected Overrides Function ProcessDialogKey(keyData As System.Windows.Forms.Keys) As Boolean
        If (keyData = Keys.Enter) Then
          Me.ProcessTabKey(keyData)
          Return True
        End If
        Return MyBase.ProcessDialogKey(keyData)
      End Function
    
    End Class
    

    Вы на саму форму точно добавили MyDataGridView?

     


    Для связи [mail]
    18 июня 2011 г. 7:10
  • У меня в форме есть DataGridView1 и класс называется Public Class DataGridView1 (чтобы DataGridView, имеющие такое же имя, но  в разных формах, могли этим классом воспользоваться)  - но не работает
    19 июня 2011 г. 12:04
  • Тот грид что на форме имеет имя DataGridView1 или его тип DataGridView1? Все объекты должны быть объектами типа  DataGridView1 (тот класс в котором реализовано поведение Enter - Tab)


    Для связи [mail]
    21 июня 2011 г. 6:36
  • Т.е. тот грид, что у меня на форме, должен иметь не имя DataGridView1, а тип DataGridView1(в котором реализовано поведение Enter - Tab)? Но ведь я беру  DataGridView с панели инструментов, а там тип предопределен (DataGridView). Значит я должен добавить новый контрол DataGridView1 на панель инструментов? Как это сделать?
    21 июня 2011 г. 12:29
  • Да грид должен быть объектом нового типа, в котором реализован Enter - Tab.

    Visual Studio сама должна сразу или после первой компиляции автоматически определить новый контрол и добавить в Toolbox. В панели инструментов он будет в разделе "ИмяПроекта Components", от туда и перетаскивайте на форму DataGridView1.


    Для связи [mail]
    • Предложено в качестве ответа ulcerModerator 22 июня 2011 г. 6:04
    21 июня 2011 г. 21:29
  • Спасибо, помогло! Я туда и внимания не обращал. Теперь буду.
    22 июня 2011 г. 5:31
  • Другая проблема, у меня в программе этих гридов (типа DataGridView) порядка 30 шт. Всех их удалить, и завести новые типа DataGridView1? Или есть другая возможность?
    22 июня 2011 г. 12:11
  • Либо удалить и создать новые, либо в коде файла Form1.design.cs найти объявление этих гридов и заменить им тип. А потом изменить тип в строчках инициализации.
    Для связи [mail]
    27 июня 2011 г. 13:13