c#-只允许特定字母输入DataGridiView Cell

我在表格上有一个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.

上一篇:DataGridView 在指定的单元格上添加居中文本,以及获取指定单元格X,Y,坐标,高度宽度,以及行加上序号


下一篇:c#-DataGridView的数据绑定单元格