0

我对 C# 很陌生。经过搜索,我没有找到关于这个问题的相关问题。我想将此问题视为架构视图。我会尽量解释清楚:P。

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

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

我的问题是,要设置FORM与摄像头通信,是否需要先将返回值传递给主FORM?然后主FORM会和摄像头通信?

如果是这样,当有几个表格和几个类时,它会很复杂。如果没有,我能否大致了解应该做什么?比如委托或者线程什么的?

4

1 回答 1

4

表单只是用来指导用户和包含业务逻辑的类之间的输入和输出的外壳。

例如,“拍照”是驻留在 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;
    }
}

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

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();
}
于 2013-09-26T15:46:31.070 回答