gpt4 book ai didi

c# - Winform Datagridview 句柄选项卡和箭头键

转载 作者:行者123 更新时间:2023-11-30 12:11:11 25 4
gpt4 key购买 nike

我想处理 DataGridView 单元格上的 KeyDown 事件。我使用以下代码获取单元格上的 KeyDown 事件:

private void dgvData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{

var tb = (DataGridViewTextBoxEditingControl)e.Control;

tb.KeyDown += cell_KeyDown;
}

但看起来我无法处理一些特殊的键,例如制表符和箭头。这些键不会进入我的 cell_KeyDown 方法。所以我尝试在 DataGridView 的 KeyDown 事件中处理它们:

private void dgvData_KeyDown(object sender, KeyEventArgs e)
{
// handle keys
}

在那种情况下,我仍然无法捕获 Tab 键。我可以捕获箭头键,但是,在处理完我的自定义事件后,它仍然会通过箭头转到其他单元格。我想留在牢房里。

然后我像这样扩展 DataGridView:

class DataGridViewSp : DataGridView
{

protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Tab)
{
//todo special handling
return true;
}

else if (keyData == Keys.Down)
{
//todo special handling
return true;
}

else if (keyData == Keys.Up)
{
//todo special handling
return true;
}
else
{
return base.ProcessDialogKey(keyData);
}
}
}

现在我可以在这个重写的 ProcessDialogKey 方法中捕获 Tab 键。但是,它仍然没有捕获向下和向上箭头键。有什么问题吗?

完美的解决方案是在单元格编辑模式下,它以我的方式处理制表符和箭头键并留在单元格中。在网格中时,箭头键和 Tab 键以正常方式工作。

最佳答案

使用 ProcessCmdKey 代替 ProcessDialogKey。然后您将捕获所需的所有 key 。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == Keys.Tab)
{
//todo special handling
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

关于c# - Winform Datagridview 句柄选项卡和箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15955411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com