ProcessCmdKey vs ProcessDialogKey

时间:2012-11-10 18:01:20

标签: c# winforms .net-4.0 datagridview

我有一个DataGridView并且我检测到按下回车键以确认/提交单元格的值。我在ProcessCmdKey中检测到了这个密钥,但我知道存在另一个名为ProcessDialogKey的类似方法,这是它们之间的区别吗?如果我使用ProcessCmdKey检测输入 Tab Esc 键而不是使用ProcessDialogKey会怎样?

另外,我在我的应用程序中遇到一些问题,我已将删除键与删除树winforms组件中当前所选项目相关联,但当我处于DataGridView中的编辑模式时会引发此事件s单元格,然后按删除键。因此,如果DataGridView的单元格当前处于编辑模式并且用户按下删除键以避免引发删除树中所选项目的事件,我希望处理此密钥。那么如何实现呢?我可以使用ProcessCmdKey来检测删除密钥,如果是,请使用它吗?它应该有用吗?

1 个答案:

答案 0 :(得分:1)

要验证DataGridView中的行,您应该使用RowValidating事件,这样可以避免ProcessCmdKey中的所有怪癖。如果您使用鼠标,向上/向下箭头或向上/向下翻页离开行,它也会进行验证。

关于TreeView,您最好使用KeyDown事件。如果没有任何其他步骤,只有在TreeView得到关注时才会触发。如果你在DataGridView内工作 - 它不会开火。也就是说, Del 键将在Edit模式下删除文本,在选择行时删除行,如果坐在单元格上则不执行任何操作。这是有问题的控件的默认行为 - 不需要额外的代码就可以使它像那样工作。

你应该避免覆盖ProcessCmdKey,除非它不起作用(这种情况很少见)。