我对C#很新。搜索后,我没有找到有关此问题的相关问题。我想将此问题视为架构视图。我将尝试解释清楚:P。
例如,我有两个FORM(主FORM,相机设置FORM)和一个类(Camera类)。 应用程序启动时,主FORM将首先显示。
主要表格需要与相机通信。 通过单击主窗体上的按钮生成设置FORM。 设置FORM也需要与相机通信。
我的问题是,为了设置FORM与相机通信,是否有必要首先将返回值传递给主FORM?然后主要的FORM将与相机通信?
如果是这样,当有多个表格和几个类时会非常复杂。 如果没有,我可以对应该做什么做广泛的了解吗?如委托或线程还是什么?
答案 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();
}