多个窗体和多个类之间的最佳结构(C# Windows 窗体应用程序)

本文关键字:窗体 Windows 应用程序 之间 最佳 结构 | 更新日期: 2023-09-27 18:33:05

我对C#很陌生。搜索后,我没有找到有关此问题的相关问题。我想把这个问题看作是一个架构视图。我将尝试:P清楚地解释。

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

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

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

如果是这样,当有几种形式和几个类时,它将非常复杂。如果没有,我能否对应该做什么有一个大致的了解?比如委托或线程还是什么?

多个窗体和多个类之间的最佳结构(C# Windows 窗体应用程序)

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

例如,"拍照"是驻留在 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();
}