Csharp/C#教程:Winform Datagridview处理选项卡和箭头键分享


Winform Datagridview处理选项卡和箭头键

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

private void dgvData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { var tb = (DataGridViewTextBoxEditingControl)e.Control; tb.KeyDown += cell_KeyDown; } 

但看起来我无法处理像tab和箭头这样的特殊键。 这些键不会转到我的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键。 但是,它仍然没有捕获向下和向上箭头键。 有什么不对的吗?

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

而不是ProcessDialogKey使用ProcessCmdKey 。 然后,您将捕获所需的所有键。

上述就是C#学习教程:Winform Datagridview处理选项卡和箭头键分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/954722.html

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

精彩推荐