0

私はC#にかなり慣れていません。検索したところ、この問題に関する関連する質問は見つかりませんでした。この問題を建築観として考えてみたい。説明を明確にするように努めます:P.

たとえば、2 つの FORM (メイン FORM、カメラ設定 FORM) と 1 つのクラス (クラス Camera) があります。アプリケーションが起動すると、メイン 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;
    }
}

次に、メインフォームを表示するメインメソッドで:

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 に答える