右クリックするたびに表示される contextmenustrip を持つユーザー コントロールがあります。ユーザーがこのメニューの項目を選択すると、この情報を親コントロールに渡して、これに従って反応できるようにする必要があります。
したがって、このイベントを強制的にサブスクライブするには、親が必要です。それを伝える方法はありますか?
それを行う方法がない場合、例外をスローするか、(イベント ハンドラーの) null 値をチェックして何もしないでください。
ありがとう。
コンパイル時にこれを強制する方法はありません。つまり、.NET フレームワーク/C# 言語には、コンパイル時に静的チェックを実行して、このロジックがコードに実装されていることを確認できるものはありません。
実行時に、必要な検証を実行できます。たとえば、デリゲートの呼び出しリストを調べて、親がそのリストに含まれていることを確認できます。
このように、イベント ハンドラーが指定されていない限り、ユーザー コントロールの特定のコンストラクターを作成して、インスタンス化を防ぐことができます。
public partial class MyUserControl : UserControl {
public MyUserControl (ToolStripItemClickedEventHandler handler) {
InitializeComponent ();
myContextMenuStrip.ItemClicked += handler;
}
}
ただし、これは Visual Studio のフォーム デザイナーではうまく機能しません。フォーム デザイナーは通常、パラメーターのないコンストラクターを想定しているためです。代わりに、コードからコントロール インスタンスを手動で作成する必要があります。