Domanda

sto cercando di sostenere la modifica di più celle in un datagridview. Sono quasi completo, come correttamente copia il contenuto di altre cellule quando l'editing è fatto. Quello che sto lavorando ora sta catturando premuto il primo tasto.

Quando mi sono l'editing solo una cella, utilizzando EditOnKeystrokeOrF2 funziona bene. Tuttavia, quando si selezionano più celle, sto catturando l'evento KeyDown e chiamando manualmente BeginEdit. Quando faccio questo, però, il tasto premuto non è incluso nel montaggio.

Come posso ottenere che il primo tasto premuto nella mia cella?

È stato utile?

Soluzione

Ho fatto alcuni esperimenti aggiuntivo e trovato un modo per rendere questo accada. E 'un po' sciatto, ma funziona.

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);
        }
}

Con l'iscrizione per l'evento CellBeginEdit, posso plop il valore in là. Faccio qualche altra elaborazione del _keyValue per renderlo un numero, ma che non è rilevante per il resto di questo.

Altri suggerimenti

può essere, è sufficiente contrassegnare la chiave non è stata gestita.

private void dataGridView_KeyDown(Object sender, KeyEventArgs keyEventArgs)
{
   keyEventArgs.Handled = false;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top