我希望能够使单元格的值只有某些字符。但是,我不会显示编辑控件,因为某些列是只读的。常见的解决方案是使用此方法(如下所示)或为整个表单执行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”事件,但从未调用过。有什么建议吗?
答案 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进行单元格格式化,所以我知道它有效。注意:这是一个死亡答案,可以帮助将来找到这篇文章的其他人。