C#VS:如何在每次加载表单时使更改保持不变

C#VS:如何在每次加载表单时使更改保持不变,c#,arrays,visual-studio,constants,C#,Arrays,Visual Studio,Constants,我正在使用Visual Studio C制作一个简单的程序# 这个节目是关于车库预订系统的。 在预订表单中,用户将从下拉列表中选择一个级别,并根据其请求显示10个标签。用户将点击他需要的地点(标签上现在会有一个汽车图像,表示该地点已被保留),然后获得车票 我的问题是,当用户返回主页并返回到预订表单时,再次选择他以前选择的级别。。标签将显示为干净和空,因为以前没有人保留过 我的问题是,在每次加载表单时,更改标签图像和文本并永远不返回其默认值的最佳方法是什么 我声明了两个标签数组,实际上添加了20个

我正在使用Visual Studio C制作一个简单的程序#

这个节目是关于车库预订系统的。 在预订表单中,用户将从下拉列表中选择一个级别,并根据其请求显示10个标签。用户将点击他需要的地点(标签上现在会有一个汽车图像,表示该地点已被保留),然后获得车票

我的问题是,当用户返回主页并返回到预订表单时,再次选择他以前选择的级别。。标签将显示为干净和空,因为以前没有人保留过

我的问题是,在每次加载表单时,更改标签图像和文本并永远不返回其默认值的最佳方法是什么

我声明了两个标签数组,实际上添加了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;


    }

首先是命名。有这么多标签,名字叫labelN。很容易混淆。另外,设置事件处理程序不需要23次,您可以遍历特定的标签并为所有标签分配一个事件处理程序。我建议你用标签来解决这个问题。也许您还需要编写UserControl


第二。尝试使用单例模式、状态模式或更好的模式,以MVC/MVP风格实现windows窗体应用程序。至少Singleton是最简单的解决方案。

每次加载表单时,标签都会重新呈现,并采用您设置的默认值

有许多技术可以保留控件的最后状态。 基本上,当预订表单关闭时,您需要在内存中存储标签状态的标志。 这可以在Form_unload事件上完成,您可以使用的一种技术是将它们保存在静态字典中,其中字符串键可以是标签id,SomeFlagType是您用来标记此“点已保留”的某种类型,如果我没有弄错的话。因此,您的值可以是一个布尔标志,甚至可以是存储在控件中并希望保留的值

在Form_Load事件中,您可以根据标签的id“查询”字典,并返回标志或值并将其应用于标签


如果是多用户客户机-服务器环境,并且您希望将静态词典存储在服务器端供所有人查询,那么这将是一种稍微不同的方法。

首先,在表单中使用一个面板(您可以在其中放置所有标签),以便您可以通过以下方式将事件处理程序添加到所有标签中:

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

      }
为了保存控件的设置,我认为可以使用
Properties.settings.Default.Save()