我在表格上有一个datagridview.
网格中有4列-否,答案,键,结果.
否,键和结果列是只读的.
这意味着我不会在这些列中输入一些数据.
但是我将在“答案”列中输入值.
并且值只能是-A,B,C,D和E.
当我按下例如X键时,我不希望X显示在单元格中.
我可以用带有keypress事件的文本框来做到这一点.
现在,您能告诉我,我如何使用“答案”列单元格事件的按键事件来实现它.
解决方法:
您可以使用DataGridView的EditingControlShowing事件来完成此操作.
在此事件的事件处理程序中,无论何时在datagrid中输入数据,您都可以访问显示的文本框.
这意味着,此时,您可以将事件处理程序附加到显示的文本框的KeyPress事件上:
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;
}
}
由于DataGridView将始终为使用文本框的网格中的每个单元格“共享”文本框控件,因此应检查是否是第一次引发该事件.
如果您在DataGridView中还有其他非只读的列,并且您希望用户也在其中输入数据(不受限制),那么这种方法将不合适. (除非您签入OnKeyPress事件处理程序,否则当前单元格所属的列).
(请注意,您还必须考虑小写字母a,b,c.