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

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

          

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

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


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

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

最佳答案

您需要将控件的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());
  }
}

关于c# - 跟踪40多个控制值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11210974/

10-11 13:12