没有检测到转义键C#

时间:2014-04-04 08:49:24

标签: c# keydown

首先向所有人致以问候,因为这是我的第一篇文章。

我是C#的新手,所以可能解决方案很明显。

我有一个包含姓名和日期数据的datagridview。双击日期列时,会显示datetimepicker以选择日期。如果击中了Escape,则隐藏datetimepicker并使旧数据生效。 当代码运行时,如果我双击最后一行中的日期列,则会弹出datetimepicker,但不会被读取。 如果在最后一行之前的某一行中完成相同的操作,则esc正常工作。 如果首先在另一行中然后在最后一行中完成相同的操作,则esc再次正常工作。 唯一的问题是在最后一行首次激活datetimepicker。也代表回车键

用于键读取和datetimepicker处理

private void dateTimePicker1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter) { CellAddValue(1, dateTimePicker1.Value); }
    if (e.KeyCode == Keys.Escape) { CellAddValue(1, dateWhenSelDate); }
}

public void CellAddValue(int o, DateTime date)
{
    string dateString = date.ToString(dateFormat);
    if (DateTime.Compare(date, dateTimePicker1.MinDate) == 0) { dateString = ""; }
    dataGridView1.Rows[selectedRow].Cells[selectedColumn].Value = dateString;
    if (o == 1)
    {
        dateTimePicker1.Hide();
        dataGridView1.Focus();
    }
}

我必须设置一些设置或选项才能工作吗? 感谢

2 个答案:

答案 0 :(得分:3)

认为这是一个win-form应用程序

查看Form.KeyPreview

您需要设置

From.KeyPreview = true;

答案 1 :(得分:0)

要详细控制所有按键,您可以覆盖表单的ProcessCmdKey方法,这样就可以拦截所有键事件:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    string keyName = keyData.ToString(); // You might rather use the Keys. enum

    if ("Escape".Equals(keyName))
    {
        Action();
        return true; // If you return true the key event won't be treated any further
    }
    else // pass the key on to your forms, they will be treated as if this method wasn't here
    {
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

我通常在

中使用它
formInstance.KeyPreview = true;

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey%28v=vs.110%29.aspx