Найти шаблон дизайна в этой ситуации - PullRequest
0 голосов
/ 28 июля 2011

Я занимаюсь разработкой приложения .NET WinForm. У меня есть контроллер A, этот контроллер A будет управлять созданием списка форм: FormA1, FormA2, ... И у меня есть контроллер B, этот контроллер B будет управлять созданием списка форм: FormB1, FormB2.

Каждая форма будет открыта как вкладка в MainForm, пользователь может выбрать вкладку для отображения формы на этой вкладке.

Когда пользователь выбирает FormA1, я могу знать, что он от контроллера A, или когда пользователь выбирает FormB1, я могу знать, что он от контроллера B.

Я хочу знать, как помочь мне найти контроллер, соответствующий Форме, которую открывает пользователь. Дайте мне лучший способ и шаблон дизайна, который я должен использовать.

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Контроллеры двух разных типов (классов)? Являются ли два вида форм разными типами (классами)? В этом случае просто создайте поле, в котором вы передаете контроллер в форму при создании

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)
    {
    }
}
1 голос
/ 28 июля 2011

Прошло много времени с тех пор, как я занимался программированием на WinForms, но я помню, что у каждого компонента есть поле Tag. Вы можете установить поле тега вкладки для вашего контроллера. Когда что-то сделано, обратитесь к активной вкладке, получите контроллер из поля тега и сделайте что-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...