Pregunta

Estoy tratando de apoyar la edición de varias celdas en un DataGridView. Estoy casi completa, ya que copia el contenido correctamente a otras células cuando se realiza la edición. Lo que estoy trabajando ahora está capturando la primera tecla pulsada.

Cuando estoy editando una sola célula, utilizando EditOnKeystrokeOrF2 funciona bien. Sin embargo, cuando se seleccionan varias celdas, estoy capturando el evento KeyDown y llamando manualmente BeginEdit. Cuando lo hago, sin embargo, la tecla pulsada no se incluye en la edición.

¿Cómo puedo conseguir que la primera tecla pulsada en mi celular?

¿Fue útil?

Solución

Lo hice algunos experimentos adicionales y encontré una manera de hacer que esto suceda. Es un poco descuidado, pero 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);
        }
}

Al registrarse para el evento CellBeginEdit, puedo plop el valor en ese país. Hago algún otro procesamiento de la _keyValue para que sea un número, pero eso no es relevante para el resto de este.

Otros consejos

Puede ser que es suficiente para marcar la clave no fue manejado.

private void dataGridView_KeyDown(Object sender, KeyEventArgs keyEventArgs)
{
   keyEventArgs.Handled = false;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top