2011-07-28 5 views
0

私は.NET WinFormアプリケーションを開発しています。私はコントローラAを持っています、このコントローラAはフォームのリストの作成を管理します:FormA1、FormA2、...そして私はコントローラBを持っています、このコントローラBはFormB1、FormB2のフォームリストの作成を管理します。この場合のデザインパターンを見つける

各フォームは、メインフォームのタブのように開かれます。このフォームでは、タブを選択してそのタブにフォームを表示できます。コントローラB

から

ユーザーがFormA1を選択すると、私はそれは、コントローラAからで知ることができる、またはユーザーがFormB1を選択したとき、私はそれを知ることができている私は、コントローラを見つけるために私を助ける方法を知りたいです対応するユーザーが開くフォーム。最善の方法と私が使用すべきデザインパターンを教えてください。

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

答えて

1

私はWinFormsプログラミングを行って以来、長い時間がかかりましたが、すべてのコンポーネントにタグフィールドがあります。タブのタグフィールドをコントローラに設定できます。何かが行われたら、アクティブなタブを参照し、タグフィールドからコントローラを取得して何かをします。

1

コントローラーは2つの異なるタイプ(クラス)ですか? 2種類のフォームは異なるタイプ(クラス)ですか?その場合、コントローラを作成時にフォームに渡すフィールドを作成してください。

interface IController 
{ 
    ControllerForm CreateForm(); 
} 

class ControllerA : IController 
{ 
    public ControllerForm CreateForm() 
    { 
     return new FormA(this); 
    } 
} 

class ControllerB : IController 
{ 
    public ControllerForm CreateForm() 
    { 
     return new FormA(this); 
    } 
} 

abstract class ControllerForm : Form 
{ 
    public IController Controller { get; private set; } 

    protected ControllerForm(IController controller) 
    { 
     this.Controller = controller; 
    } 
} 

class FormA : ControllerForm 
{ 
    public FormA(IController controller) 
     : this(controller) 
    { 
    } 
} 

class FormB : ControllerForm 
{ 
    public FormB(IController controller) 
     : this(controller) 
    { 
    } 
} 
関連する問題