我在表单上有一个datagridview。 并且网格中有4列 - 无,答案,键,结果。 不,键和结果列是只读的。这意味着我不打算向这些列输入一些数据。 但我将输入值到Answer列。 和值可以只 - A,B,C,D和E. 当我按例如X键我不想X显示在单元格中。 我可以用文本框的按键事件来做到这一点。只允许DataGridiView特定的字母单元格
现在你能告诉我,我如何使用Answer列单元格事件的按键事件来实现它。
我在表单上有一个datagridview。 并且网格中有4列 - 无,答案,键,结果。 不,键和结果列是只读的。这意味着我不打算向这些列输入一些数据。 但我将输入值到Answer列。 和值可以只 - A,B,C,D和E. 当我按例如X键我不想X显示在单元格中。 我可以用文本框的按键事件来做到这一点。只允许DataGridiView特定的字母单元格
现在你能告诉我,我如何使用Answer列单元格事件的按键事件来实现它。
您可以使用DataGridView
的EditingControlShowing
事件来完成此操作。
在此事件的事件处理程序中,您可以访问在数据网格中输入数据时显示的Textbox
。
这意味着,在这一点上,您可以将事件处理程序附加到文本框的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。