我有一个DataGridView
,如果用户按下新行中的某个键,我想打开另一个窗口,该窗口知道按下了哪个键,但是没有创建新行。我看到此处忽略了KeyDown
和KeyPress
个事件;我可以使用RowsAdded
,但行会被添加;或者我可以使用CellBeginEdit
并设置e.Cancel=true
,但我无法访问按下的键。关于如何做到这一点的任何想法?
答案 0 :(得分:1)
KeyPress
事件确实是你想要的。
DataGridView
不会忽略它,但它由负责用户输入的TextBox
处理。
所以你需要抓住它。
以下是一个例子:
TextBox editTB = null; // a class level variable to hold the reference
// here we get the reference to the editing control
// other control types will work as well..
private void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is TextBox)
{
editTB = (TextBox)e.Control;
editTB.KeyPress -= editTB_KeyPress;
editTB.KeyPress += editTB_KeyPress;
}
}
void editTB_KeyPress(object sender, KeyPressEventArgs e)
{
// use the checks you actually need..
if (e.KeyChar == '#')
{
// do your things..
Console.WriteLine("---->" + e.KeyChar);
e.Handled = true; // eat up the key event
}
}