2012-01-15 24 views
1

私が取り組んでいるプロジェクトで、イベントハンドラを自分のデータグリッドビューにリセットする際に問題があります。DataGridviewの再利用(イベントの登録解除)

私は、シリアルポートに接続されたテストデバイスから値を入力するデータグリッドビューをいくつか持っています。 テストセッションが完了したら、新しいセッションのためにdatagridviewsをリセットしたいと思います。

私の問題は、作成された各セルのセルクリックのイベントを登録していて、そのイベントがDataGridviewsをクリアしても保持されることです。

私はここで、プログラムのDataGridViewに

の値を設定しています私はcellclickのイベントを追加する方法です:

for (int i = 0 ; i < dgList.Count ; i++) //dgList is list of datagridviews 
{ 
    int numberForEvent = i; //i is datagrid nr i 

    dgList[i].CellClick += ((sender, e) => 
    { 
     alterValueClick(numberForEvent, e.RowIndex); 
    }); 
} 

それは大丈夫、私は私のプログラムを使用しますが、私はデータグリッドをリセットする場合は、初めての作品イベントが2回登録されるなどの新しいテストセッション。

イベントをクリアする方法はありますか、私のデザインについては間違っていますか?リセットによって

+0

リセットとはどういう意味ですか? –

+0

イベントはセルに属しませんが、dgvに属します。 1-by1-1をクリアするか、新しいグリッドを作成します。 –

+0

申し訳ありませんが、リセットでは、データグリッドを繰り返し処理し、.rows.clearと.columns.clearを使用します。 – karra

答えて

2

私は、データグリッドを反復して.rows.clearを使用して、イベントを登録解除しません行と列をクリア

を.columns.clearすることを意味します。 2つのオプションがあります

- either re-initialize DataGrid and re-register the event 

- un-register previous event and re-register new one. 

ところで、なぜイベントをリセットする必要がありますか?なぜ既に登録されているイベントを使用しないのですか?

編集

ため、私はあなたがそれを宣言している方法であなたはここにクリックイベントを登録解除することができないと思います。これは、イベントハンドラ固体メソッドを割り当ててみてください、それはこの

のように、国連に登録されることはありません匿名の方法であり、それは

//for registering 
dgList[i].CellClick += new DataGridViewCellEventHandler(YourMethod); 

//for unregistering 
dgList[i].CellClick -= new DataGridViewCellEventHandler(YourMethod); 

を動作するはずです、あなたがforループの内部に登録されているだけのよう、のために実行します登録を解除するためのループもあります。

+0

答えをありがとう!私がイベントをリセットする必要があるのは、テスト機器から必要な値の数に応じてデータグリッドの数を隠すことがあるからです。それは私が値を格納する方法と関係しています。イベントの登録を解除する方法は? – karra

+0

更新された回答を参照 –

+0

ありがとうもう一度!最初の提案を使用してデータグリッドを再初期化することができました。別のメソッドを作成しようとしましたが、引数としてiの値を指定できませんでした。私はかなりWindowsフォームに新しいです:) – karra

関連する問題