DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのCellValueChangedイベントについて

環境/言語:[Window XP VS 2010 C# Express]
分類:[.NET]

質問させていただきます。よろしくお願いします。
質問内容なのですが、現在作成中のDataGridViewのCellValueChangedイベントをプログラムに追加したのですがセル内の編集が終わってもループし、結果として

'System.StackOverflowException'のハンドルされていない例外がSystem.Windows.Forms.dllで発生しました。

と例外が発生してしまいます。

イベント内の処理は編集したDataGridView内の値をプログラム内の関数で演算し、
別のセルに表示するものなのですが、なぜ処理がループするのか分かりません。

以下にコードを示すので、ご指摘、アドバイス等ありましたらよろしくお願いします。

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
     try
     {
         double input,output;
         input = Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
         kaikei(input, out output);   //kaikeiはプログラム内の関数
         dataGridView1.Rows[e.RowIndex].Cells[2].Value = output;
     }
     catch (System.Exception ex)
     {
         MessageBox.Show(ex.Message, "error");
     }
}
■No28070に返信(としおさんの記事)
>          dataGridView1.Rows[e.RowIndex].Cells[2].Value = output;
ここでdataGridView1_CellValueChangedが発生するから。


private bool blnFLG = false;

private void dataGridView1_CellValueChanged(〜)
{
     if (blnFLG) return;
     blnFLG = true;
     //--- ここで処理
     
     blnFLG = false;
}

こんな感じにすれば一応防げます。
>イベント内の処理は編集したDataGridView内の値をプログラム内の関数で演算し、
>別のセルに表示するものなのですが、なぜ処理がループするのか分かりません。

1.セルを編集したので処理開始。
2.別のセルに計算結果を表示する。←これも編集ですよね?
3.1へ戻る。

表示=編集って分かれば納得できますか?

DOBON.NET | プログラミング道 | プログラミング掲示板