DataGridView限制用户输入

本文关键字:输入 用户 DataGridView | 更新日期: 2023-09-27 18:04:53

是否可以通过RegEx来限制用户输入到DataGridView单元格?例如,设置单元格输入格式为[0-9]{2},以禁止用户输入2位数以外的内容。

对不起,我不是很清楚。我知道CellValidation事件,并且可以在用户输入后检查输入的值。但是我想知道我是否可以在这个事件之前防止错误的用户输入。我的意思是,当单元格regex是[0-9]时,用户不能输入字母。这可能吗?

DataGridView限制用户输入

如果您希望在键入无效值时防止无效值,您可以处理EditingControl.KeyPress事件。下面是示例代码。但是,您必须修改正则表达式以允许不完整的值。您仍然应该使用适当的验证,因为还有其他方法可以将数据放入网格中(例如复制粘贴)。

    private string pattern = "^[0-9]{0,2}$";
    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        dataGridView1.EditingControl.KeyPress -= EditingControl_KeyPress;
        dataGridView1.EditingControl.KeyPress += EditingControl_KeyPress;
    }
    private void EditingControl_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar))
        {
            Control editingControl = (Control)sender;
            if (!Regex.IsMatch(editingControl.Text + e.KeyChar, pattern))
                e.Handled = true;
        }
    }

@Ginosaji,你的代码很好,但是使用editingControl.Text + e.KeyChar,你假设用户在控制文本的末尾输入最后一个字符。如果用户将字符放在控件中间的某个地方怎么办?