2

我正在使用 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;


    }
4

3 回答 3

0

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

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

在 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;

      }

为了保存控件的设置,我认为您可以使用Properties.Settings.Default.Save(); http://msdn.microsoft.com/en-us/library/bb397755.aspx

于 2012-12-07T11:23:37.423 回答
0

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

第二。尝试使用模式 Singleton 或 State,或者更好地以 MVC/MVP 风格实现您的 windows 窗体应用程序。至少 Singleton 对您来说是最简单的解决方案。

于 2012-12-07T11:15:46.620 回答