Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在这种情况下找到一种设计模式_C#_Winforms_Design Patterns - Fatal编程技术网

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

C# 在这种情况下找到一种设计模式,c#,winforms,design-patterns,C#,Winforms,Design Patterns,我正在开发一个.NET WinForm应用程序。我有一个控制器a,这个控制器a将管理创建一个表单列表:FormA1,FormA2。。。我有一个控制器B,这个控制器B将管理创建一个表单列表:FormB1,FormB2 每个表单都将像主表单中的选项卡一样打开,用户可以选择一个选项卡在该选项卡中显示表单 当用户选择Form1时,我可以知道它来自控制器A,或者当用户选择FormB1时,我可以知道它来自控制器B 我想知道如何帮助我找到用户打开的控制器对应表单。给我最好的方式和我应该使用的设计模式 谢谢。我

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

每个表单都将像主表单中的选项卡一样打开,用户可以选择一个选项卡在该选项卡中显示表单

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

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


谢谢。

我已经很久没有做WinForms编程了——但我记得每个组件都有标记字段。可以将选项卡的标记字段设置为控制器。完成某项操作后,请参阅“活动”选项卡,从“标记”字段获取控制器并执行操作。

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

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