Usuário com melhor resposta
como identificar uma tecla em um evento private void XXXXCellValidating(object sender, DataGridViewCellValidatingEventArgs e) que nao possui KeyEventArgs e?

Pergunta
-
Respostas
-
Veja se neste exemplo resolverá seu problema:
bool _enterPressed = false; private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { string headerText = dataGridView1.Columns[e.ColumnIndex].HeaderText; ///Exemplo de validação para coluna nome if (_enterPressed) { if (headerText.Equals("Nome")) { if (string.IsNullOrEmpty(e.FormattedValue.ToString())) { dataGridView1.Rows[e.RowIndex].ErrorText = "Campo \"Nome\" não pode estar vazio"; e.Cancel = true; dataGridView1.CancelEdit(); _enterPressed = true; } } } else { e.Cancel = false; } } private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty; _enterPressed = false; } private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) => { if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab) { _enterPressed = true; } }); }
Espero ter ajudado!
Um abraço!
- Marcado como Resposta JuniorCL quinta-feira, 5 de abril de 2018 17:04
Todas as Respostas
-
Amigo, bom dia ! Não entendi bem a sua dúvida.
Você tem um DataGridView que estará preenchido, certo ?
Os dados que estão nele você vai validar clicando na primeira linha do DataGridView, e sair pressionando a tecla enter/TAB para validar os dados contidos em cada linha ?
Pode me explicar melhor para poder lhe ajudar ...
-
vamos la...
'em edição da celula'!! eu resolvo dar esc!!! como estou validando celula, não deixa sair(pois a validação e para não ser vazio)!!
gostaria c possivel somente validar a celula primeiramente for precionado ENTER ou TAB!!
- Editado JuniorCL terça-feira, 3 de abril de 2018 14:08
-
-
Olá bom dia!
Utilize este evento, assim quando pressionar "esc" irá remover os erros.
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty; }
Um abraço!
sim ja utilizo este evento mas nao deixa sair c nao digitar algo na celula nem fechar o formulario!!
- Editado JuniorCL terça-feira, 3 de abril de 2018 14:29
-
-
Veja se neste exemplo resolverá seu problema:
bool _enterPressed = false; private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { string headerText = dataGridView1.Columns[e.ColumnIndex].HeaderText; ///Exemplo de validação para coluna nome if (_enterPressed) { if (headerText.Equals("Nome")) { if (string.IsNullOrEmpty(e.FormattedValue.ToString())) { dataGridView1.Rows[e.RowIndex].ErrorText = "Campo \"Nome\" não pode estar vazio"; e.Cancel = true; dataGridView1.CancelEdit(); _enterPressed = true; } } } else { e.Cancel = false; } } private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty; _enterPressed = false; } private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) => { if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab) { _enterPressed = true; } }); }
Espero ter ajudado!
Um abraço!
- Marcado como Resposta JuniorCL quinta-feira, 5 de abril de 2018 17:04
-
Veja se neste exemplo resolverá seu problema:
DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) => { if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab) { _enterPressed = true; } });
Espero ter ajudado!
Um abraço!
-
Olá bom dia amigo,
Criei um PreviewKeyDownEventHandler utilizando expressões lambda (funções anonimas) como instancia de delegate. Ex:
Ou seja, ao invés de eu ter criado um outro método assim:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler(this.Control_PreviewKeyDownEventHandler); } private void Control_PreviewKeyDownEventHandler(object sender, PreviewKeyDownEventArgs ev) { if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab) { _enterPressed = true; } }
Preferi criar tudo dentro de um único método assim:
DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) => { if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab) { _enterPressed = true; } });
Espero ter ajudado!
-
Olá bom dia amigo,
Criei um PreviewKeyDownEventHandler utilizando expressões lambda (funções anonimas) como instancia de delegate. Ex:
Ou seja, ao invés de eu ter criado um outro método assim:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler(this.Control_PreviewKeyDownEventHandler); } private void Control_PreviewKeyDownEventHandler(object sender, PreviewKeyDownEventArgs ev) { if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab) { _enterPressed = true; } }
Preferi criar tudo dentro de um único método assim:
DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; e.Control.PreviewKeyDown += new PreviewKeyDownEventHandler((o, ev) => { if (ev.KeyCode == Keys.Enter || ev.KeyCode == Keys.Tab) { _enterPressed = true; } });
Espero ter ajudado!