Заставьте клавишу ввода вести себя как клавиша табуляции на форме - PullRequest
2 голосов
/ 08 декабря 2008

Есть ли простой способ перемещать элементы управления в форме точно так же, как клавиша табуляции? Это включает в себя перемещение ячеек на сетке данных и т. Д.

Ответы [ 3 ]

2 голосов
/ 08 декабря 2008

Поскольку дескрипторы datagridview являются собственными событиями вкладок для перемещения между ячейками, вам придется создать пользовательский элемент управления сеткой данных и переопределить событие onKeyUp следующим образом:

Public Class MyCustomDataGrid
    Inherits DataGridView

    Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
        If e.KeyCode = Keys.Enter Then
            e.Handled = True
            Me.ProcessTabKey(Keys.Tab)
        Else
            MyBase.OnKeyUp(e)
        End If
    End Sub
End Class

Это обработает клавишу ввода как клавишу табуляции при попытке табуляции через ячейки сетки данных, если вам нужно обрабатывать вкладку также в форме, вам придется делать то, что сказала Марио, но с небольшими изменениями.

Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
        If e.KeyCode = Keys.Enter AndAlso Not ActiveControl.GetType() Is GetType(Class1) Then
            e.Handled = True
            Me.ProcessTabKey(Not e.Shift)
        Else
            MyBase.OnKeyUp(e)
        End If
    End Sub

Вам просто нужно добавить проверку типа активного элемента управления, иначе форма не сможет работать с вашим кодом вкладки таблицы данных.

2 голосов
/ 08 декабря 2008

используя winforms, вам следует установить для свойства Form KeyPreview значение true

и в событии нажатия клавиши для формы вы должны иметь

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13)
       GetNextControl(ActiveControl, true).Focus();
}
0 голосов
/ 16 августа 2017
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Keys keyPressed = (Keys)msg.WParam.ToInt32();
switch (keyPressed)
{
    case Keys.Enter:
    case Keys.Tab:
        Control ctrl = this.GetNextControl(this.ActiveControl, true);
        while (ctrl is TextBox == false) 
        {
            ctrl = this.GetNextControl(ctrl, true);
        }
        ctrl.Focus();
        return true;
    default:
        return base.ProcessCmdKey(ref msg, keyData);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...