0

3つのタブコントロールを備えたフォームがあり、各タブコントロールには12個ほどのテキストフィールドがあります。現在、Form1.cs内のテキストフィールドを変更するためのすべてのメソッドがあります。これは機能していますが、非常に長いクラスです。フォームコントロールを呼び出すメソッドをそのフォームクラス内に保持するのが適切なメソッドなのか、それとも他のクラスに分割する必要があるのか​​、興味があります。このスレッドを読んだので混乱するかもしれませんが、選択した答えは、他のクラスのフォームコントロールにアクセスしようとすべきではないと言っているようです。 C#のクラスからフォームメソッドとコントロールにアクセスするにはどうすればよいですか?

4

4 に答える 4

2

このシナリオでカプセル化するための最良の方法は、各タブのテキストフィールドを含むユーザーコントロールを作成することです。次に、各タブにはユーザーコントロールがあり、それらのフィールドに固有のすべてのロジックは独自のコントロールにカプセル化されます。

于 2012-05-24T20:39:57.453 に答える
1

UIデータにアクセスするコードを内に残すことができるFormが、そのデータの計算を操作/実行するコードを別のクラスに残す場合。このようにして、(たとえば)UnitTestingに使用できる単一のクラスまたはクラスのセットを作成できます。

于 2012-05-24T20:37:03.120 に答える
0

これは簡単に実行できます。フォームへの参照を他のクラスに渡すだけですが、それらは緊密に結合されるため、壊れやすくなります。

より良いオプションは、インターフェースを定義し、フォームにそれを実装させることですが、それは厄介になる可能性があります。

他のオプションは、タブのコントロールをユーザーコントロールまたは別のフォームに移動してから、メインフォームのタブでホストすることです。次に、各タブのデータと操作を分離できます。ここでも、1つまたは2つのインターフェースを定義して実装すると、分離するのに役立ちます。

このように考えると、UIをタブに分割します。その背後には、UIの観点からいくつかの基本的なロジックがあるため、タブのコントロールが実行する機能を分離するという観点から、いくつかのロジックが必要です。私はそれに対する例外を見てきましたが、それは通常、タブの分離にロジックがまったくなかったためです。

于 2012-05-24T20:43:19.297 に答える
0

アプリケーションを整理するには、さまざまな方法があります。通常、GUI(フォーム)を他のアプリケーションロジックから分離することです。フォームにはロジックのみを表示してください。データのデータクラス(モデルとも呼ばれます)を作成します。、、などCustomerのクラスが必要になる場合があります。これらのクラスには「ビジネスロジック」が含まれています。たとえば、Orderクラスは、注文フォームではなく、税金の計算方法を知っています。OrderAddress

データバインディングを使用してビジネスオブジェクトをフォームにバインドすることにより、多くの労力を節約できます。データバインディングの使用については、私のSOの回答を参照してください。

MVCパターンを使用して、ロジックを3つの部分に分割することで、さらに先に進むことができます。ここでは詳しく説明しません。これだけ、MVCはModelViewControllerの略です。モデルはビジネスクラス、ビューはフォーム、コントローラーはモデルとフォームを管理し、モデルのロードと保存などを行うクラスです。

于 2012-05-24T20:49:32.433 に答える