-1

右クリックするたびに表示される contextmenustrip を持つユーザー コントロールがあります。ユーザーがこのメニューの項目を選択すると、この情報を親コントロールに渡して、これに従って反応できるようにする必要があります。

したがって、このイベントを強制的にサブスクライブするには、親が必要です。それを伝える方法はありますか?

それを行う方法がない場合、例外をスローするか、(イベント ハンドラーの) null 値をチェックして何もしないでください。

ありがとう。

4

2 に答える 2

3

コンパイル時にこれを強制する方法はありません。つまり、.NET フレームワーク/C# 言語には、コンパイル時に静的チェックを実行して、このロジックがコードに実装されていることを確認できるものはありません。

実行時に、必要な検証を実行できます。たとえば、デリゲートの呼び出しリストを調べて、親がそのリストに含まれていることを確認できます。

于 2013-02-25T16:13:29.950 に答える
2

このように、イベント ハンドラーが指定されていない限り、ユーザー コントロールの特定のコンストラクターを作成して、インスタンス化を防ぐことができます。

public partial class MyUserControl : UserControl {
    public MyUserControl (ToolStripItemClickedEventHandler handler) {
        InitializeComponent ();
        myContextMenuStrip.ItemClicked += handler;
    }
}

ただし、これは Visual Studio のフォーム デザイナーではうまく機能しません。フォーム デザイナーは通常、パラメーターのないコンストラクターを想定しているためです。代わりに、コードからコントロール インスタンスを手動で作成する必要があります。

于 2013-02-25T16:47:18.240 に答える