代码之家  ›  专栏  ›  技术社区  ›  Damien

使enter键的行为类似于窗体上的tab键

  •  2
  • Damien  · 技术社区  · 17 年前

    3 回复  |  直到 17 年前
        1
  •  2
  •   Marioh    17 年前

    使用winforms时,应将Form KeyPreview属性设置为true

    在窗体的按键事件中

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == 13)
           GetNextControl(ActiveControl, true).Focus();
    }
    
        2
  •  2
  •   Nathan W    17 年前

    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
    

    在尝试通过datagrid单元格进行制表时,会将enter键作为制表键进行处理, 如果你还需要处理表单上的tab,你必须按照Marioh所说的去做,但要做一点改变。

    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
    

    您只需添加对活动控件类型的检查,否则表单将停止自定义datagrid选项卡代码的工作。

        3
  •  0
  •   xudong    8 年前
    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);
    }
    }
    
    推荐文章