2

Visual Studio C# を使用して簡単なプログラムを作成しています

プログラムはガレージ予約システムについてです。予約フォームで、ユーザーがドロップダウン リストからレベルを選択すると、要求に応じて 10 個のラベルが表示されます。ユーザーは必要なスポットをクリックし (ラベルには車の画像が表示されます。スポットが予約されていることを意味します)、チケットを取得します。

私の問題は、ユーザーがホームページに戻って予約フォームに戻り、以前に選択したのと同じレベルを再度選択したときです。以前に誰も予約していないため、ラベルはきれいで空に見えます。

私の質問、ラベルの画像とテキストを変更し、フォームが読み込まれるたびにデフォルトに戻らないようにする最善の方法は何ですか?

ラベルの 2 つの配列を宣言し、実際には 20 個の非表示のラベルを追加しました。

public partial class Form3 : Form
{

      Label[] level1 = new Label[10];
     Label[] level2 = new Label[10];

コンストラクターでラベルを割り当てました。

public Form3()
    {

        InitializeComponent();
        label4.Click += new EventHandler(SpotChosen);
        label5.Click += new EventHandler(SpotChosen);
        label6.Click += new EventHandler(SpotChosen);
        label7.Click += new EventHandler(SpotChosen);
        label8.Click += new EventHandler(SpotChosen);
        label9.Click += new EventHandler(SpotChosen);
        label10.Click += new EventHandler(SpotChosen);
        label11.Click += new EventHandler(SpotChosen);
        label12.Click += new EventHandler(SpotChosen);
        label13.Click += new EventHandler(SpotChosen);

        label14.Click += new EventHandler(SpotChosen);
        label15.Click += new EventHandler(SpotChosen);
        label16.Click += new EventHandler(SpotChosen);
        label17.Click += new EventHandler(SpotChosen);
        label18.Click += new EventHandler(SpotChosen);
        label19.Click += new EventHandler(SpotChosen);
        label20.Click += new EventHandler(SpotChosen);
        label21.Click += new EventHandler(SpotChosen);
        label22.Click += new EventHandler(SpotChosen);
        label23.Click += new EventHandler(SpotChosen);

        level1[0] = label4;
        level1[1] = label5;
        level1[2] = label6;
        level1[3] = label7;
        level1[4] = label8;
        level1[5] = label9;
        level1[6] = label10;
        level1[7] = label11;
        level1[8] = label12;
        level1[9] = label13;

        level2[0] = label14;
        level2[1] = label15;
        level2[2] = label16;
        level2[3] = label17;
        level2[4] = label18;
        level2[5] = label19;
        level2[6] = label20;
        level2[7] = label21;
        level2[8] = label22;
        level2[9] = label23;


    }
4

3 に答える 3

0

まず第一に - ネーミング。labelN という名前のラベルがたくさんあります。混同しやすいです。また、イベント ハンドラーを設定するのに 23 回も必要ありません。特定のラベルを反復処理して、それらすべてに 1 つのイベント ハンドラーを割り当てることができます。このごちゃまぜをラベルで解決することをお勧めします。たぶん、UserControl も記述する必要があります。

2番。パターン Singleton または State を使用するか、Windows フォーム アプリケーションを MVC/MVP スタイルで実装することをお勧めします。少なくともシングルトンはあなたにとって最も簡単なソリューションです。

于 2012-12-07T11:15:46.620 に答える
0

フォームが読み込まれるたびに、ラベルが再レンダリングされ、設定したデフォルト値が取得されます。

所有しているコントロールの最後の状態を保持できる多くの手法があります。基本的に、予約フォームが閉じられたときに、ラベルの状態のフラグをメモリに保存する必要があります。これは Form_unload イベントで実行できます。使用できる手法の 1 つは、文字列キーがラベル ID である静的辞書に保存することです。SomeFlagType は、この「スポットが予約されている」ことをマークするために使用しているタイプです。私があなたを誤解していなければ。したがって、値はブール値のフラグ、または保持したいコントロールに保存した値である可能性があります。

Form_Load イベントでは、ラベルの ID で辞書を「クエリ」し、フラグまたは値を返し、それをラベルに適用できます。

マルチユーザーのクライアント/サーバー環境で、静的辞書をサーバー側に保存して全員がクエリできるようにする場合は、少し異なるアプローチになります。

于 2012-12-07T11:22:02.953 に答える
0

まず、フォーム内のパネル (すべてのラベルを配置できる場所) を使用して、次の方法ですべてのラベルにイベント ハンドラーを追加できるようにします。

 foreach (Control c in Panel1.Controls)
       {
                c.Click += SpotChosen;
       }
 private void SpotChosen(object sender, EventArgs e)
      {
          var label = sender as Label;

      }

また、コントロールの設定を保存するには、 http://msdn.microsoft.com/en-us/library/bb397755.aspxを使用できると思いますProperties.Settings.Default.Save();

于 2012-12-07T11:23:37.423 に答える