2011-01-06 5 views
2

これについて人々がどうやって行くのだろうと思っています。 1つのクラスを作成し、ツリービューを作成してWinformに追加するとします。C#クラス間でデータを渡す

私は、ツリービュー内のデータに依存する別のクラスを持っています。たとえば、ユーザーがTreeview内の特定のノードをクリックすると、クラスbはノードが保持している情報を必要とするため、計算を実行して結果を表示できます。

ツリービューへの参照を2番目のクラスに渡すか、必要なデータだけを渡すことをお勧めしますか?または、ツリービューを静的に設定し、ノードをクリックしたときに新しいクラスがツリービューに直接アクセスできるようにイベントを使用するのは大丈夫でしょうか?

ありがとうございました。

+0

クラスbのインスタンスをいつ作成していますか? –

答えて

5

私は、ツリービューを保持するクラスでイベントを発生させます。つまり、クラスが持つデリゲートとイベントを定義します。従属クラスは、そのイベントにサブスクライブし、そのイベントに含まれるデータに基づいて動作することができます。あなたの質問を理解しているように、依存するクラスはツリービューで何もする必要はないので、ツリービューについて知らないといけません。

public delegate void YouControlHandler(int relevantData1, string relevantData2); 
public class ClassContainingTreeView 
{ 
    public event YouControlHandler TreeViewClickedEvent; 
    public void OnTreeViewClicked(object sender, EventArgs) 
    { 
     // Handle request locally first and extract relevantData1/2 
     if(TreeViewClickedEvent != null) 
      TreeViewClickedEvent(relevantData1, relevantData2); 
    } 
} 

public class DependingClass 
{ 
    ClassContainingTreeView yourObject = new ClassContainingTreeView(); 

    public DependingClass() 
    { 
     yourObject.TreeViewClickedEvent += new YouControlHandler(EventHandler); 
    } 

    protected void EventHandler(int relevantData1, string relevantData2) 
    { 
      // Handle event 
    } 
} 
+0

これは私が達成したいと思うものだと思います。ありがとう。 –

+0

こんにちはTomas、ここではクラス外のデリゲートをグローバル名前空間レベルで宣言していますか?申し訳ありませんが、愚かな質問の場合、私は代議員を初めて迎え入れました。ありがとう。 –

+1

@ダーレン:そうです、そうです。私のコードはおそらくコンパイルされません。詳細はこちら:http://msdn.microsoft.com/en-us/library/9aackb16.aspxそれが明確でない場合は、もう一度お尋ねください。 –

4

データを渡すだけです。

クラスをUIコントロールに密接に結合させたくありません。


なぜなら、イベントを消費するために静的にTreeViewを作成する必要があると思いますか?

静的でないオブジェクトからイベントを購読することができます。

+1

しかし、あなたは他の種類の依存関係を持っています。私は実際には、代わりにイベントで私の解決策に行きます。それはそれをもっと密接に結合し、より多くのクラスがツリービューの実際の「クリック」に作用する可能性があります。 –

+0

@Tomas Jansson - 本当ですか? TreeView固有のイベント引数を使用しますか?プリミティブ(またはDTO)を使用すると結合が少なくなります。クラスが2つの文字列とintで動作することができれば、それは疎結合です。 – Oded

+0

@Oded:あなたはそれが間違っていると思います。ツリービューを持つクラスは、ツリービューイベントに応答します。イベントの処理が終了すると、関連するデータとともにツリービューがクリックされたことを定義したイベントが発生します。 –

関連する問題