有没有一种简单的方法可以像 Tab 键一样在表单上移动控件?这包括在 datagridview 等上移动单元格。
Damien
问问题
4918 次
3 回答
2
使用 winforms 您应该将 Form KeyPreview 属性设置为 true
并在您应该拥有的表单的按键事件中
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
GetNextControl(ActiveControl, true).Focus();
}
于 2008-12-08T01:52:32.100 回答
2
因为 datagridview 句柄是用于在单元格之间移动的自己的选项卡事件,所以您必须创建一个自定义 datagrid 控件并覆盖 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
您只需添加对活动控件类型的检查,否则表单将阻止您的自定义数据网格选项卡代码工作。
于 2008-12-08T02:11:08.787 回答
0
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);
}
}
于 2017-08-16T02:33:31.960 回答