我需要以下设计的一些指导。
我有一个包含各种组框的选项卡控件。在组框内,存在与该组框相关的特定控件。例如:
现在,每当对组框中的任何控件进行更改时,都需要跟踪该控件的值,因为在应用程序运行周期结束时,控件数据将需要保存到包含该值的文件中。一个示例文件是: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/