我在表单上有一个datagridview。 并且网格中有4列 - 否,答案,键,结果。 否,键和结果列是只读的。 这意味着我不打算向这些列输入一些数据。 但我会在“答案”列中输入值。 值只能是 - A,B,C,D和E. 当我按下例如X键我不希望X在单元格中显示。 我可以使用带有按键事件的文本框来完成它。
现在可以告诉我,如何使用Answer列单元事件的按键事件来实现它。
答案 0 :(得分:3)
您可以使用EditingControlShowing
的{{1}}事件来完成此操作。
在此事件的事件处理程序中,只要您在数据网格中输入数据,就可以访问正在显示的DataGridView
。
这意味着,此时,您可以将事件处理程序附加到显示的文本框的Textbox
事件中:
KeyPress
由于DataGridView将始终“共享”使用文本框的网格中每个单元格的文本框控件,因此应检查是否是第一次引发该事件。
如果DataGridView中的其他列不是只读的,并且您希望用户输入数据的位置(不受约束),那么这种方法将不合适。 (除非您在 private bool _firstTime = true;
private void dataGridView1_EditingControlShowing( object sender, DataGridViewEditingControlShowingEventArgs e )
{
if( !_firstTime )
{
return;
}
_firstTime = false;
var t = e.Control as TextBox;
if( t != null )
{
t.KeyPress += OnKeyPress;
}
}
private void OnKeyPress( object sender, KeyPressEventArgs e )
{
if( e.KeyChar != 'A' && e.KeyChar != 'B' && e.KeyChar != 'C' )
{
e.Handled = true;
}
}
eventhandler中检查当前单元格所属的列。)
(请注意,您还必须考虑小写字母a,b,c。