5

だから私はC#WinFormアプリケーションの開発を始めたばかりで、私が取り組んでいる各プロジェクトはより大きく、より多くのユーザー機能を必要としているようです。すべての機能を1つのフォームに追加すると、明らかにすぐに制御できなくなる可能性があります。私の最後のプロジェクトでは、機能を個々のフォームに分割し、誰かが「Feature1」を実行したいと言うときはいつでも、Feature1フォームをインスタンス化して、メインフォームを所有者とするダイアログとして表示しました(クリックできないようにしました)。 )。

フォーム内でコードを整理するために他にどのような方法があるのか​​知りたいだけです。1つのフォームに大量の機能を持たせる必要がある場合、アイテムを整理するための良い方法はありますか?私は単に数百/数千行の長さのコードファイルを持っているのが嫌いです。

答えは単にデザインにあるかもしれません。複数のフォームを利用できるように、UIを事前にデザインしてみてください。

私が直面した別の例。タブコントロールを作成し、約5つのタブがありました。これらの5つのタブには多くの機能があり、すべて同じCSファイルに保存されていました。他にどのようなオプションがありましたか?そのタブの特定の機能を含む新しいカスタムTabControlクラスを作成しますか?

私は読んでもかまわないので、そこにまともな記事があれば、遠慮なくそれらをリンクしてください!

4

4 に答える 4

4

go-toメソッドはController/Presenterです。アイデアは、ウィンドウがそのコントロールのUIイベントを実際に処理することだけを担当する必要があり、ウィンドウの実際の作業を実行するコントローラーのメソッドを呼び出すことによってそれを行う必要があるということです。ウィンドウには必要なハンドラーを含めることも、UIイベントをコントローラーメソッドに直接リンクすることもできます。通常は前者の方が簡単な方法ですが、実際にはControllerメソッドにあるはずのコード行をここかそこに忍び込みたくなるかもしれません。これにより、FormクラスのレイアウトロジックとプレゼンテーションロジックをControllerのビジネスロジックで切断します。

マークホールのユーザーコントロールの提案も良いものです。タブまたは一般的なUIコントロールの組み合わせ用のUserControlクラスを作成することで、メインフォームのコードからUIのその部分をレイアウトするロジックを切り離すと、コントロールが「ドロップイン」され、ウィンドウが多くの場合に機能します。より簡単な方法。これは、カスタムであるが再利用可能なコントロールを実装するための必須事項です。DRYの基本的な信条は、2つの異なる場所に2行のコードがあり、2つの異なるが交換可能なものに対して同じジョブを実行している場合、それらのコード行を1つの場所にマージする必要があるということです。

于 2012-08-20T22:33:39.073 に答える
2

プロジェクトでUserControlsを使用 して、機能を個別のオブジェクトにグループ化し、フォームに追加できるようにしました。

于 2012-08-20T22:31:44.880 に答える
1

推奨されるように、UIからロジックコードを分割する傾向があります。これを行う場合は、クロススレッド例外を回避するために、アプリケーション全体での呼び出し方法にいくらか注意する必要があります。ロジッククラスからUIを更新するためのデリゲートとイベントを作成するように教えられましたが、MSDNにはもちろんスレッドセーフな呼び出しを行うための多くの情報もあります。

于 2012-08-20T23:38:15.307 に答える
0

これは遅い答えだと思いますが、それでも誰かがこの質問を読んでいる場合は、フォームのコード行数を減らす別の方法は、データバインディングを使用することです。プロパティを使用している場合、データバインディングを使用すると、のようなことを行うためだけにハンドラーを常に作成する必要がなくなりますPropertyName = textBox.Text;。データバインディングは、データセットとオブジェクトの両方で機能します。

于 2018-07-17T12:30:16.567 に答える