我有一个带撤消功能的控件,当用户按下Escape时,控件将还原原始值。
问题是我将控件集成到DataGridView时。 DataGridView“吃掉”Escape键,因此我的控件无法检测到Escape键。
当我在EditingControlWantsInputKey上输入“return true”时,我的控件能够检测到Escape键,但是出现了其他问题,DataGridView无法关闭我的控件,它保留在EditMode中。
如何允许我的控件检测Escape键同时还允许DataGridView关闭我的控件?
答案 0 :(得分:2)
我能够解决自己的问题。我将 LookupBox 的撤消方法设为public,然后在我的DataGridView控件(类DgvLookupBoxEditingControl:LookupBox,IDataGridViewEditingControl )上,我输入以下代码:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Escape)
this.Undo();
return base.ProcessCmdKey(ref msg, keyData);
}
答案 1 :(得分:0)
只有当Keys.KeyCode == Keys.Escape时,你才应该“返回true”;
否则返回
!dataGridViewWantsInputKey。
答案 2 :(得分:0)
或者您可以将PreviewKeyDown处理程序添加到编辑控件并检测Escape那里。
dataGridView1.EditingControlShowing += (o, e) => {
if(e.Control is DataGridViewTextBoxEditingControl)
{
var editBox = e.Control as DataGridViewTextBoxEditingControl;
editBox.PreviewKeyDown += KeyPressHandler;
}