0

DataGridViewから継承した独自のクラスc_DataGridViewを作成しました。このクラスでは、イベントCellEndEditを実装しました。

ここで、 myGrid1という名前のフォームにこのクラス/コントロールのインスタンスを作成し、次に、ここのフォームにグリッドの同じイベントを実装しました。

フォームを実行してグリッド上のセルを編集すると、イベントトリガーシーケンスは次のようになります。最初にクラスc_DataGridViewのCellEndEditイベントトリガーがトリガーされ、次にフォームトリガーに実装されたオブジェクトのイベントがトリガーされます。

最初にc_DataGridViewのオブジェクトのイベントをトリガーし、次にクラスのイベント自体をトリガーすることができた可能性はありますか?

私は自分自身をクリアしたことを願っています。

4

2 に答える 2

1

イベントハンドラーが起動される順序は予測できません。これに対処するための標準パターンがあります。.NETクラスには、常にイベントと同じ名前の保護されたメソッドがあり、接頭辞として「On」が付いています。

したがって、派生クラスでは、イベントをサブスクライブする代わりに、OnCellEndEdit()メソッドをオーバーライドします。これで、イベントの処理方法と発生方法を完全に制御できます。最初にbase.OnCellEndEdit()を呼び出してから、カスタムコードを記述できます。または、最初にカスタムコードを記述して、最後に呼び出すこともできます。または、それを呼び出すことができず、CellEndEditイベントがまったく発生しないようにします。明らかに、注文を完全に制御できるようになりました。正しい方法は、達成したいことによって異なります。

于 2012-07-29T16:39:12.023 に答える
0

あなたのコメントに基づいて、私は別の道を進んだでしょう。

行に一致するクラス。BindingListプロパティを使用して、行のリストに一致するクラス。次に、それをグリッドにバインドします。次に、行クラスでパーセンテージが変更されたときに、Amountプロパティを更新します。これにより、プロパティ変更イベントが発生し、グリッドが更新されます。

したがって、基本的には、プレゼンテーション層の内部イベントハンドラーではなく、いくつかのクラスですべてのデータロジックを取得してみてください。

于 2012-07-29T15:47:57.933 に答える