是否可以通过RegEx
将用户输入限制为DataGridView
单元?例如设置单元格输入的格式为[0-9]{2}
,以禁止用户输入除2位之外的内容。DataGridView限制用户输入
UPDATE 对不起,我不是很清楚。我知道CellValidation
事件,并且我可以在用户输入后检查输入的值。但我不知道我是否可以在此事件之前防止错误的用户输入之前。当单元正则表达式为[0-9]
时,我的意思是用户不能输入字母。有可能吗?
是否可以通过RegEx
将用户输入限制为DataGridView
单元?例如设置单元格输入的格式为[0-9]{2}
,以禁止用户输入除2位之外的内容。DataGridView限制用户输入
UPDATE 对不起,我不是很清楚。我知道CellValidation
事件,并且我可以在用户输入后检查输入的值。但我不知道我是否可以在此事件之前防止错误的用户输入之前。当单元正则表达式为[0-9]
时,我的意思是用户不能输入字母。有可能吗?
如果您想要在键入时防止输入无效值,则可以处理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;
}
}
工作正常。辉煌! – fat 2013-03-20 13:56:11
@Ginosaji,你的代码是好的,但与editingControl.Text + e.KeyChar
你假设用户输入在控制文本结尾的最后一个字符。如果用户将字符置于控件中间某处,会怎么样?
当你限制输入值时,它被称为“掩码”:请参见[this](http://stackoverflow.com/questions/6411511/datagridview-mask-values-in-column) – 2013-03-20 07:11:06
我认为在这种情况下你应该使用一些JavaScript/jQuery – 2013-03-20 07:54:12
@pawlakppp在WinForms中效果不佳:) – 2013-03-20 08:52:45