多个表单和多个类之间的最佳结构(C#Windows Forms Application)

时间:2013-09-26 15:31:32

标签: c# .net windows-forms-designer

我对C#很新。搜索后,我没有找到有关此问题的相关问题。我想将此问题视为架构视图。我将尝试解释清楚:P。

例如,我有两个FORM(主FORM,相机设置FORM)和一个类(Camera类)。 应用程序启动时,主FORM将首先显示。

主要表格需要与相机通信。 通过单击主窗体上的按钮生成设置FORM。 设置FORM也需要与相机通信。

我的问题是,为了设置FORM与相机通信,是否有必要首先将返回值传递给主FORM?然后主要的FORM将与相机通信?

如果是这样,当有多个表格和几个类时会非常复杂。 如果没有,我可以对应该做什么做广泛的了解吗?如委托或线程还是什么?

1 个答案:

答案 0 :(得分:4)

表单仅仅是指导用户和包含业务逻辑的类之间的输入和输出的shell。

例如“拍照”是驻留在Camera类中的业务逻辑:

class Camera
{
    public Picture TakePicture()
    {
        return _cameraAPI.TakePicture();
    }
}

点击主要表单上的“拍照”按钮后,您拨打camera.TakePicture()

  

我的问题是,为了设置表格与相机通信,是否有必要首先将返回值传递给主表单?然后主表格会与相机沟通吗?

您可以将Camera类的实例传递给每个表单,以便它们可以彼此独立地运行。您可以通过构造函数注入来执行此操作,您可以使用接受Camera实例的新构造函数调整每个表单,然后保留对它的本地引用:

class MainForm
{
    private Camera _camera;

    public MainForm(Camera camera)
        : this()
    {
        _camera = camera;
    }
}

然后在主方法中,显示主窗体:

var camera = new Camera();
var mainForm = new MainForm(camera);

Application.Run(mainForm);

现在,当您想要从主窗体显示设置窗体时,请重复:

public void Settings_Click()
{
    // Pass camera reference
    var settingsForm = new SettingsForm(_camera);

    settingsForm.ShowDialog();
}