2009-08-04 8 views
0

フォームインスタンスからコンポーネント(例:imagelist、timer)にアクセスする最も良い方法は何ですか?私はC#で.NET Compact Frameworkバージョン3.5 SP1で複数フォームのWindowsフォームアプリケーションに取り組んでいます。 MVC実装用の各フォームに関連付けられたControllerクラスがあります。ここに私のサンプルControllerクラスがあります。Windowsフォームコンポーネントへのアクセス

public class Controller 
{ 
     public void Init(Form f) 
     { 
      //f.Controls will allow access to all controls 
      //How shall I access imagelist, timer on form f. 
     } 
} 

私の質問は、リフレクションのパフォーマンスヒットなしに非ビジュアルコンポーネントにアクセスするにはどうすればよいですか?すべてのコードスニペットを歓迎します。リフレクションが唯一の方法であるなら、コンポーネントのアクセスに最適な方法を教えてください。

おかげで、

答えて

2
あなたはどちらかが直接(ない好ましい選択)コントロールを公開するかから呼び出すことができるメソッド/プロパティにビュー上の操作を抽象化し、強く型付けされたフォームまたはインタフェースの実装を渡すべきである

コントローラ(好ましい選択肢)。

0

いいえ、反射は方法ではありません。単純に目的を達成するという観点からは、コントロールを返す読み取り専用プロパティを公開することができます。たとえば、あなたは、フォーム上のimageList1という名前ImageListを持っていると言う:

public ImageList ImageList 
{ 
    get { return imageList1; } 
} 

あなたはその後、imageList1への参照を取得するためにImageListプロパティにアクセスすることができます。

しかしながら

これは臭いコードです。 で公開する必要があります。ImageListで何をする必要があるかに関するプロパティと機能が公開されています。あなたの外部コードはあなたのフォーム上の特定の実装を気にしてはいけません。つまり、画像で何かを行い、それらの動作を達成する関数を提供する必要があることを知っている必要があります;それはImageListコントロールであることを知る必要はありません。

関連する問題