有没有办法捕获DataGridView KeyPress事件而不显示编辑控件?

时间:2015-04-15 16:28:00

标签: c# datagridview

我希望能够使单元格的值只有某些字符。但是,我不会显示编辑控件,因为某些列是只读的。常见的解决方案是使用此方法(如下所示)或为整个表单执行keyPress事件。不幸的是,最后一个解决方案为您提供了所有按下的键的事件。

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
   DataGridViewTextBoxEditingControl tb =(DataGridViewTextBoxEditingControl)e.Control;
   tb.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress);

   e.Control.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress);
}

我尝试过使用原生“KeyDown”事件,但从未调用过。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

要捕获事件,您需要分配一个事件处理程序。我复制了一些显示如何的Microsoft代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        **this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.KeyPressWork);**
        this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.KeyDownWork);
    }

    private void KeyDownWork(object sender, KeyEventArgs e)
    {
        MessageBox.Show(e.KeyCode.ToString(), "KeyDown");

        KeysConverter kc = new KeysConverter();
        MessageBox.Show(kc.ConvertToString(e.KeyCode), "KeyDown");
    }

    private void KeyPressWork(object sender, KeyPressEventArgs e)
    {
        MessageBox.Show(e.KeyChar.ToString(), "KeyPress");
    }
}

在这种情况下,textBox1正在接收处理程序的地址。尝试使用相同的单元格。我用DataGridView进行单元格格式化,所以我知道它有效。注意:这是一个死亡答案,可以帮助将来找到这篇文章的其他人。