Pergunta

Eu estou tentando apoiar a edição de várias células em uma datagridview. Estou quase completa, como corretamente copia o conteúdo para outras células quando a edição é feita. O que eu estou trabalhando agora está capturando a primeira tecla pressionada.

Quando eu estou editando apenas uma célula, usando EditOnKeystrokeOrF2 fina funciona. No entanto, quando várias células são selecionadas, estou capturando o evento Keydown e chamando manualmente BeginEdit. Quando eu fizer isso, no entanto, a tecla pressionada não está incluído na edição.

Como posso obter essa primeira tecla pressionada no meu celular?

Foi útil?

Solução

Eu fiz algumas experiências adicionais e encontrou uma maneira de fazer isso acontecer. É um pouco desleixado, mas funciona.

private int _keyValue;
private Boolean _checkKeyValue = false;

private void Grid1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    DataGridViewCell cell = Grid1.Rows[e.RowIndex].Cells[e.ColumnIndex];

    if (_checkKeyValue)
    {
        _checkKeyValue = false;

        if (value != -1)
        {
            cell.Value = _keyValue;
        }
    }   
}

private void Grid1_KeyDown(object sender, KeyEventArgs e)
{
    if (Grid1.SelectedCells.Count > 1)
        {
            _checkKeyValue = true;
            _keyValue = (int)e.KeyValue;
            Grid1.BeginEdit(false);
        }
}

Ao registar-se para o evento CellBeginEdit, posso plop o valor lá. Eu faço algum outro processamento do _keyValue para torná-lo um número, mas isso não é relevante para o resto deste.

Outras dicas

Pode ser que seja suficiente para marcar a chave não foi tratada.

private void dataGridView_KeyDown(Object sender, KeyEventArgs keyEventArgs)
{
   keyEventArgs.Handled = false;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top