5

私は主にバックエンドの開発者ですが、フロントエンドの設計を任されています。アプリケーションで 1 つのパネル (フォーム) だけを作成しています。ユーザーが前のパラメーターで選択した内容に基づいて、フォームから他の項目を動的に追加/削除する必要があります。たとえば、パネルの上部に顧客ドロップダウンがあります。ユーザーが選択したときに他のどのドロップダウン メニューを表示するかを構成できるようにする必要があります。最低でも 90 の異なる構成があります。各構成には、約 50 個のパラメーターがあります。C# でこの状況を処理する最善の方法は何ですか?

私の会社の誰かが、構成ごとに新しいフォームを使用することを提案しました.SOで、ユーザーコントロールを使用するように人々が言っ​​ているのを見たことがあります。これらの提案のいくつかは直感に反するように見えました...

誰かがこれを行うための「適切な」方法を提案できますか? 大まかに言うと、私はこれまで 1 つのフォームしか作成したことがなく、非常に単純でした。(これは .net 4.0 を使用したデスクトップ アプリケーションです)

編集:これはWinformsにあります

4

3 に答える 3

0

これは WinForms ですか、それとも WPF ですか?

とにかく、デザイナーで行うことはすべて、実行時にコードで行うことができます。コントロールの追加は、新しいオブジェクトを作成してプロパティを割り当てるだけです:

Winフォーム:

Button btn = new Button();
btn.Name = "Dynamic Button";
btn.Id = "DynButton"
btn.Width = 50;
btn.Click = {...};
[...]
panel.Controls.Add(btn); // panel is a parent container control. You have to have a parent for you button.

など。WPFは実質的に同じです-コントロール、親、コンテナーなど。

あなたの場合、内部にすべてのものを含む最初は非表示のパネルのセットがあり、それらの表示/非表示はフローロジックに依存します。

幸運を!

于 2012-07-25T13:01:22.653 に答える
0

C# にはあまり詳しくないので、サンプル コードを提供することはできませんが、過去の経験に基づくと、探しているのはDecorator Patternのようです。

Decorator パターンを使用すると、コンパイル時ではなく実行時にオブジェクトを動的に作成できます。これを使用して、以前に入力したものによって必要に応じてフォーム/ボタン/何でも作成できます。

于 2012-07-25T17:39:34.467 に答える
0

多数のコンポーネントを必要とするフォームを設計する場合、必要な結果を得るために使用できるさまざまな方法があります。いくつかの可能性を見てみると…

方法 1: 構成ごとに個別のフォームを作成する

ユーザーが選択を行った後、目的のフォームの新しいインスタンスを作成できるため、これは悪い考えではありませんが、個々のフォームをすべて設定するには時間がかかりますが、難しくはありません。

方法 2: 構成ごとに複数のパネルを作成する

これは、最初にすべてのパネルを非表示にしてから、ユーザーが選択したパネルを表示することを除いて、方法 1 と同様に機能します。事前にパネルを作成して非表示または表示するか、実行時にプログラムで行うことができます。(プログラムを使用せずにパネルを作成する場合、私の意見では、コンポーネントでいっぱいの多数のパネルを非表示にするのは適切ではありません)

方法 3; 必要なコンポーネントをプログラムで作成する

ユーザーの選択に基づいて目的のコンポーネントを生成するコードを作成するだけです。

例:

if(comboBox1.SelectedIndex == 0)
{
    ComboBox selection1 = new ComoboBox();
    selection1.Location = new Point(XXX,YYY); //Set location
    //You can add the events for the combobox, set up the properties 
    form1.Controls.Add(selection1); //Add the component to the form or panel that you want it displayed on

    //Write code to dynamically create next object(s)....
}
else if (comboBox1.SelectedIndex == 1)
{
    //Programmatically create components for selection2
}

これらのうち、フォームにコンポーネントを配置するだけなので方法 1 が最も簡単だと思いますが、これには時間がかかります。私の意見では、コードをさまざまな可能性に合わせて適切に整理し、処理するフォームやパネルが多数ない限り、プログラムによる方法がおそらく最もエレガントです。コンポーネントをいじるだけです。ただし、プログラムでプロパティを割り当てるコンポーネントを作成する場合、同様に時間がかかる場合があります。

これを行うための最も正式なアプローチが何であるかについて 100% 確信があるわけではありませんが、これらはほんの一部のアイデアです。

お役に立てれば。

于 2012-07-25T13:18:09.483 に答える