我尝试使用 datagridview 的按键事件,但它不起作用。如何检测 datagridview 中的上下左右箭头键按下情况?
尝试使用
KeyDown
事件:
private void dgv1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
//do stuff
}
}
可以用
PreviewKeyDown
:
public Form1()
{
InitializeComponent();
dgv.Columns.Add(new DataGridViewTextBoxColumn());
dgv.Rows.Add("text");
dgv.PreviewKeyDown += (sender, args) =>
{
Debug.Print(args.KeyCode.ToString());
};
}
您无法捕获箭头键,因为它们是由消耗事件的
ProcessKeyPreview
的 DataGridView
方法处理的。
如果您想手动处理这些,您需要扩展 DataGridView
并覆盖该方法。
或者,您也可以侦听
EditingControlShowing
事件,然后将 PreviewKeyDown
事件侦听器添加到 EditingControl,如下所示
this.dataGridView.EditingControlShowing += (sender, eventArgs) =>
{
if (e.Control is DataGridViewTextBoxEditingControl editingControl)
{
editingControl.PreviewKeyDown += (o, args) =>
{
// Handle arrow event
};
}
};
但这样我认为你无法阻止事件的传播