表单只是用来指导用户和包含业务逻辑的类之间的输入和输出的外壳。
例如,“拍照”是驻留在 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();
}