DataGridView から継承するコントロールを作成しています。私がやりたいことの 1 つは、CellFormatting イベントを処理せずに(そして自分で書式設定を行うことで)列の書式プロバイダーが使用されないというバグを処理することです。
「列フォーマットプロバイダーがあり、CellFormatting イベントハンドラーがない場合は、フォーマットを行う」という「OnCellFormatting」メソッドを作成すると思いました。
重要な部分 (私が思った) は、「...そして、CellFormatting イベント ハンドラーがありません」でした。
さて、過去にイベントでコントロールを書いたとき、私は次のようなことをしました:
public event EventHandler SomethingHappened;
protected void OnSomethingHappened(EventArgs e)
{
EventHandler handler = this.SomethingHappened;
if (handler != null) handler(this, e);
}
これは正常に機能し、このパターンがハンドラーがイベントにアタッチされているかどうかを判断し、そうである場合はそれらのハンドラーを呼び出すことを理解しています。十分に公平ですが、なぜこれができないのですか:
protected void OnCellFormatting(EventArgs e)
{
EventHandler handler = this.CellFormatting;
if (handler == null) DoSomething();
}
エラーは、「イベント 'System.Windows.Forms.DataGridView.CellFormatting' は += または -=" の左側にのみ表示されます。
この (タイプの) イベントの違いは何ですか?
イベントの定義に移動して、独自のイベントを作成するとします。
パブリック イベント DataGridViewCellFormattingEventHandler CellFormatting2
...コンパイラはこれを私の「ハンドラー」変数に割り当てて喜んでいるので、私の質問は、CellFormattingイベント(および、他の多くのイベント)と何が違うのか、それに対するイベントハンドラーがあるかどうかを判断できないことです?
ありがとう、ロス