0

メインフォームにユーザー コントロールを追加する関数を作成しようとしています。この関数をユーザーコントロール自体からも利用できるようにしたいので、静的にしています。

私の問題は、使用できない静的な場合this.Controls.Add(ucontrol);、変更しようとしましたActiveForm.Controls.Add(ucontrol);が、ActiveForm が NULL であり、Controls プロパティがない (例外をスローする) ことです。

更新#1:ユーザーコントロール内で次のようなことをしました:

MainForm ref_to_mainform_to_gain_access_to_functions = (MainForm)Parent;      
ref_to_mainform_to_gain_access_to_functions.DisplayControl(ucontrol);         

たぶんそれはさらに良いですが、静的メソッドからメインフォームにアクセスすることは可能だと思いますか?

更新#2:

Application.OpenForms["FormName"]

静的メソッドから作業しました。

そのユーザーコントロール全体の目的が、他のユーザーコントロールをオンクリックで表示するボタンを備えたメニューとして機能するかどうかをまだ調べようとしていますが、ユーザーコントロールからメインフォームの関数(ユーザーコントロールを表示する関数)を呼び出すことは依然として「デザイン犯罪」ですか? ? (「更新#1」で行ったように)

4

1 に答える 1

1

ユーザー コントロールからその親にコントロールを追加することにより、懸念の分離の原則が破られ、両方のコントロール/フォームが緊密に結合されます。Hans Passant が提案したように、イベントを使用する必要があります。参照してください: 親フォームでメソッドを呼び出し、C# で親フォームの gui 要素にアクセスするためのベスト プラクティス

于 2012-07-20T16:44:09.993 に答える