对于从基类I decided派生的更多类,可以为每个派生类创建一个基本UserControl和派生类(用于可视化;图像右侧的框)。
现在每个派生的UserControl都有一个特定的设置(左边的红色矩形)设置UI是一个单独的UserControl(可以自由移动,如果太大则放到单独的对话框中......)并且有一个底层数据类它更改(此类的实例是主UserControl的成员)。
alt text http://a.imageshack.us/img651/2710/46937664.png
这使我能够创建一个单独的类来保存(并可能保存)设置数据,将UserControl分开以设置值并将它们手动连接在一起。
这不是我第一次遇到类似问题所以我开始考虑一些类+接口,这使我可以轻松创建数据保持类并生成用户控件。我的想法就像是
class SettingsItem
{
string name;
TypeEnum type;
double value; //how about different types eg. bool? Inheritance?
}
设置类将是这些项的列表。对于每种类型,都会有一个值UserControl(checkbox / textbox / numericfield + description)。 foreach
循环将创建最终的UserControl(一个值UCs彼此相对)。
一方面,我喜欢这个想法,这是一个有趣的挑战,可能会减少无聊,重复和耗时,将较小的方块放入较大的方块并对齐它们。另一方面,在我看来有点像用霰弹枪杀死苍蝇。
是否有一些标准/现成的解决方案?有更好的方法吗?或者它是解决小问题的过于复杂的解决方案?我很乐意看到任何答案,建议,评论......
答案 0 :(得分:0)
首先,看看this主题,它可能会为您发现有趣的事情。
无论如何,根据您的问题,您可以为此目的使用序列化,如果由于某种原因您不想使用VS提供的 .settings 文件功能,以下是您如何转换和将您的项目转换为XML:
class Program
{
static void Main(string[] args)
{
var setting = new SettingsItem
{
Name = "Setting1",
Type = SettingTypes.UserSetting,
Value = "setting"
};
XmlSerializer serializer = new XmlSerializer(typeof(SettingsItem));
StringBuilder sb = new StringBuilder();
using (StringWriter sr = new StringWriter(sb))
serializer.Serialize(sr, setting);
var serialized = sb.ToString();
Console.WriteLine(serialized);
SettingsItem item;
using (var r = new StringReader(sb.ToString()))
item = (SettingsItem)serializer.Deserialize(r);
Console.WriteLine("Name: {0}, Type: {1}, Value: {2}",
item.Name,
item.Type,
item.Value);
Console.ReadKey();
}
}
[Serializable]
public class SettingsItem
{
public string Name { get; set; }
public SettingTypes Type { get; set; }
public object Value { get; set; }
}
[Flags]
public enum SettingTypes
{
ApplicationSetting = 1,
UserSetting = 2,
AdminOnly = 4,
Temporary = 8
}
获得XML后,只需将其存储在ApplicationData文件夹或您想要的任何其他位置。