2015-03-22 3 views
1

Для задания мы создаем простую программу для работы с электронными таблицами, аналогичную Excel. Ячейки в моем DataGridView редактируются пользователем, и несколько вещей происходят, когда пользователь редактирует ячейку. Как и Excel, если вы должны были ввести =A1 в ячейку A2, значение A2 изменится на значение ячейки A1 и текст, который пользователь видит обновления, чтобы отразить это. Однако свойство текста A2 должно оставаться =A1 в случае изменения значения A1. Во время отладки моего кода я заметил, что моя функция CellEndEdit повторялась дважды, хотя в ней нет петель.Winforms DataGridView CellEndEdit Loops

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     RealCell cell = spreadsheet.GetCell(e.RowIndex, e.ColumnIndex) as RealCell; 

     //set the spreadsheet cell's text to reflect the user's edit 
     if (dataGridView1.CurrentCell.Value != null) 
     { 
      cell.Text = dataGridView1.CurrentCell.Value.ToString(); 
     } 
     MenuVisibility(); 
    } 

Это большая проблема, потому что она сбрасывает текст ячейки раз и навсегда. Есть CellEndEdit функции, которые должны проходить через два раза? Как я могу остановить это? Благодаря!

+2

Вы уверены, что оба события CellEndEdit для одной и той же ячейки? Кроме того, есть ли вероятность, что вы добавляете метод к событию 'CellEndEdit' более одного раза? –

ответ

2

CellEndEdit будет срабатывать при изменении значения ячейки.

Так что в вашем случае введите значение A1, триггер CellEndEdit

Тогда ваш код А2, ячейку = значение A1, в вызвать другой CellEndEdit

Вы можете добавить логическое значение для управления, если вам нужно подавить событие вручную.

+0

Эрик и Энн Л. оба были правы. В итоге я просто не связывал свой элемент CellEndEdit с событием, так что он срабатывал только тогда, когда значение было изменено. Думаю, тоже работал бы контроль bool. –

Смежные вопросы