是否可以通過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