私は を持ってContextMenuStripいDataGridViewます。呼び出しの結果が null になることに気付いた後cm.FindForm()、コンテキスト メニューをグリッドのContextMenuStripプロパティに追加しましたが、それは役に立ちません。
FindForm()コンテキストメニューがフォームを返すように、他に欠けている設定はありますか?
注:フォームにドラッグして、ビジュアルスタジオデザイナーを介してコンテキストメニューを追加しました。また、メイン メニュー (a MenuStrip) にはこの動作が表示されずFindForm()、フォームが適切に返されます。
編集:ハンスのために(なぜ私は自分のやり方で物事を行うのか)
以前は、すべてのコードを 1 つの長い Form1.cs にまとめていましたが、これは明らかに保守が困難です。すべてのコードをコンポーネントごとに個別のクラスであるフレームワークに分離し、必要に応じてインジェクションによって他のクラスを参照し、保守と追跡が容易になることを発見しました。
コントロールではないコンポーネントについては、コンポーネントが属するフォームをコンストラクターに渡しますが、コントロールであるコンポーネントについては、FindForm()メソッドがショートカットであることがわかりました。フレームワークの基本クラスは、FindForm(). したがって、各コンポーネントは Form プロパティを介してフォームにアクセスできます。
現在、コンテキスト メニュー コントロールがその親コントロール セットを取得していないため、FindForm()動作していないことがわかりました。