在这种情况下找到设计模式

时间:2011-07-28 09:57:43

标签: c# winforms design-patterns

我正在开发.NET WinForm应用程序。我有一个控制器A,这个控制器A将管理创建一个表单列表:FormA1,FormA2,...我有一个controllerB,这个控制器B将管理创建一个表单列表:FormB1,FormB2。

每个表单都会像MainForm中的标签一样打开,用户可以选择一个标签来显示该标签中的表单。

当用户选择FormA1时,我知道它来自控制器A,或者当用户选择FormB1时,我知道它来自控制器B.

我想知道帮助我找到用户打开的控制器对应Form的方法。给我最好的方法和我应该使用的设计模式。

感谢。

2 个答案:

答案 0 :(得分:1)

自从我做WinForms编程以来已经很长时间了 - 但我记得每个组件都有Tag字段。您可以将选项卡的标记字段设置为控制器。完成某些操作后,请参阅活动选项卡,从标记字段中获取控制器并执行某些操作。

答案 1 :(得分:1)

控制器有两种不同的类型(类)吗?这两种形式是不同的类型(类)?在这种情况下,只需创建一个字段,在创建时将控制器传递给表单

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)
    {
    }
}