簡體   English   中英

多個表單和多個類之間的最佳結構(C#Windows Forms Application)

[英]Optimal structure between multiple forms and multiple classes (C# Windows Forms Application)

我是C#的新手。 搜索后,我沒有找到與此問題相關的問題。 我想將此問題視為體系結構視圖。 我會盡力使解釋清楚:P。

例如,我有兩個FORM(主FORM,相機設置FORM)和一個類(Camera類)。 當應用程序啟動時,主窗體將首先顯示。

主表單需要與相機通信。 設置表格是通過單擊主表格上的按鈕生成的。 設置FORM還需要與相機通信。

我的問題是,為了將FORM設置為與相機通信,是否需要先將返回值傳遞給主FORM? 然后主FORM將與相機通信?

如果是這樣,當存在多種形式和幾種類別時,它將非常復雜。 如果沒有,請問我應該怎么做? 比如委托還是線程還是什么?

表單僅是在用戶和包含業務邏輯的類之間引導輸入和輸出的外殼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM