1

我需要以下设计的一些指导。

我有一个包含各种组框的选项卡控件。在组框内,有与该组框相关的特定控件。例如:

在此处输入图像描述

现在,每当对组框中的任何控件进行更改时,都需要跟踪控件的值,因为在应用程序运行周期结束时,需要将控件数据保存到包含该值的文件中。一个示例文件是:

HOT_STANDBY_FEATURE_ENABLE [val from control here]

HEART_BEAT_DIGITAL_OUTPUT [val from control here] ……

我想到的一种设计有另一种设计,它只有在控件上发生 ValueChanged 事件时组框表单设置的属性。

示例代码:

class ConfigurationValues
{
    public int HotStandbyValue { get; set; }
    public int HeartBeatDigitalOutputValue { get; set; }
    //...add all other controls here
}

我看到的缺点是该标签页上有 40 个控件,因此我必须手动键入每个属性。当需要在应用程序运行周期结束时生成文件时,我有一个方法可以获取控件需要的值。

例子:

private void GenerateFile()
{
    string[] file = 
    "HOT_STANDBY_FEATURE_ENABLE "  + ConfigurationTabSettings.HotStandbyValue;
}

我需要考虑的另一个设计考虑是,每当用户单击“打开配置文件”时,需要将磁盘文件中的值加载到属性中,以便表单可以在启动时获取该数据并填充组框中的控件与他们各自的价值观。

对此设计的任何建议将不胜感激。我知道这不是最有效的方法,也不是最有经验的程序员,所以我可以搜索的任何谷歌关键字也很棒。

4

2 回答 2

3

您可以 xml 序列化和 xml 反序列化您的 ConfigurationValues 类,而不是编写手动“生成文件”和“读取文件”方法

http://support.microsoft.com/kb/815813

于 2012-06-26T15:47:36.320 回答
2

您需要将控件 Text 或 Value 属性绑定到 ConfigurationValues 类中的属性,例如

ConfigurationValues cv = Repository.ReadConfigValues();

numPulseFilterDelay.DataBindings.Add("Value", cv, "PulseFilterDelay");

// Add the rest of your control bindings here

在表单的 btnSave_Click() 上,结束对表单的当前编辑并保存配置值

void btnSave_Click(object sender, EventArgs e)
{
    BindingContext[cv].EndCurrentEdit(); // Commits all values to the underlying data source
    Repository.SaveConfigValues(cv);
}

在您的存储库类中,您将需要 Load() 和 Save() 数据的方法。您可以将 XmlSerialization 代码放在这里,或者编写自己的格式(取决于您的要求)

public class Repository
{
  public static ConfigurationValues LoadConfigValues()
  {
     var cv = new ConfigurationValues();

     string[] lines = File.ReadAllLines("values.cfg");
     foreach (string cfg in lines)
     {
        string[] nameValue = cfg.Split(new char[] { ' ' } ); // To get label/value

        if (nameValue[0] == "HOT_STANDBY_FEATURE_ENABLE")
          cv.HotStandbyFeatureEnable = nameValue[1];
        else if (nameValue[0] == "SOME_OTHER_PROPERTY")
          cv.SomeOtherProperty = nameValue[2];
        // Continue for all properties
     }

     return cv;
  }


  public static void SaveConfigValues(ConfigurationValues cv)
  {
     var builder = new StringBuilder();
     builder.AppendFormat("HOST_STANDBY_FEATURE_ENABLE {0}\r\n", cv.HostStandbyFeatureEnable);
     // Add the rest of your properties

     File.WriteAllText("values.cfg", builder.ToString());
  }
}
于 2012-06-26T15:58:31.910 回答