【发布时间】:2016-06-09 15:47:42
【问题描述】:
我有一个 WinForms 应用程序,用户可以使用它来输入值。然后将其序列化为 XML。
这里有一些代码(XML 和 C#),希望能给你们一个想法。
设计视图
The WinForm Zone Tab
右上角的 Combobox 是我在绘画中编辑的。 这个想法是用户可以在英语、法语和俄语之间切换。 静态数据将转换为语言更改为。 对于用户输入的数据,可以选择、编辑和保存新语言下的数据。
例如,如果只输入了英文数据并选择了法文,则静态字段将更改为它们的法文名称。
由于没有法语输入数据(查看区域名称),英语数据将填充网格,但用户必须将值编辑为法语,因此浴室 > Salle de Bains 和 Salle de Bains 将保存在法语下。 如果用户随后切换到英语,浴室将再次显示。
C# 代码视图 [FCMZone 类]
public class FCMZone
{
public string id { get; set; }
public string name { get; set; }
public int icon { get; set; }
public string group { get; set; }
public string listIndex { get; set; }
public string excludedSources { get; set; }
public CheckState avEnable { get; set; }
public CheckState audioOnly { get; set; }
public MyCheckBoxItem chkBoxAVEnable;
public MyCheckBoxItem chkBoxAudioOnly;
public List<FCMOption> fusionZoneOptions;
public List<FCMSource> sourceExclusion;
public List<FCMLightingFixture> lightingFixtures;
public List<FCMWindowFixture> windowFixtures;
public List<FCMLightingScene> lightingScenes;
public List<FALutronKeypad> lightingKeypadIDs;
public List<FALutronKeypad> windowKeypadIDs;
public FCMZone(string zId, string nm, Icon icn, string grp, CheckBox avEn, CheckBox aOnly, string lstIndx)
{
id = zId;
name = nm;
icon = icn.IconId;
group = grp;
avEnable = avEn.CheckState;
audioOnly = aOnly.CheckState;
chkBoxAVEnable = new MyCheckBoxItem(false);
chkBoxAudioOnly = new MyCheckBoxItem(false);
fusionZoneOptions = new List<FCMOption>();
sourceExclusion = new List<FCMSource>();
listIndex = lstIndx;
excludedSources = "All Available";
updateCheckbox();
}
public FCMZone(FCMZone fZone)
{
id = fZone.id;
name = fZone.name;
icon = fZone.icon;
group = fZone.group;
avEnable = fZone.avEnable;
audioOnly = fZone.audioOnly;
listIndex = fZone.listIndex;
chkBoxAVEnable = new MyCheckBoxItem(false);
chkBoxAudioOnly = new MyCheckBoxItem(false);
fusionZoneOptions = new List<FCMOption>();
sourceExclusion = new List<FCMSource>();
updateCheckbox();
}
public FCMZone(FusionZone zn, ZoneProps znProps)
{
id = zn.Id;
name = zn.Name;
icon = zn.IconID;
var myValue = zn.Group;
int parsedValue;
if (Int32.TryParse(myValue, out parsedValue))
{
// zn.Group is a ID number
var fcmZoneGroup = znProps.systemZoneGroupList.Find(zg => zg.id == parsedValue.ToString());
group = fcmZoneGroup.name;
}
else
{
// zn.Group is a word.
group = myValue;
}
listIndex = zn.ListIndex;
excludedSources = zn.ExcludedSources;
if (zn.AVEnable == "1")
avEnable = CheckState.Checked;
else
avEnable = CheckState.Unchecked;
if (zn.AudioOnly == "1")
audioOnly = CheckState.Checked;
else
audioOnly = CheckState.Unchecked;
chkBoxAVEnable = new MyCheckBoxItem(false);
chkBoxAudioOnly = new MyCheckBoxItem(false);
fusionZoneOptions = new List<FCMOption>();
sourceExclusion = new List<FCMSource>();
updateCheckbox();
}
}
如何从 FCMZone 构建到 XML [包含所有列表的 FusionSystem]
public class FusionSystem
{
// All list items that will be serialised to the fusion system.
public List<FusionOption> optionList = new List<FusionOption>();
public List<FusionSource> sourceList = new List<FusionSource>();
public List<FusionZoneGroup> zoneGroupList = new List<FusionZoneGroup>();
public List<FusionZone> zoneList = new List<FusionZone>();
public List<FusionUser> userList = new List<FusionUser>();
public List<FusionSipGroup> sipGroupList;
public List<FusionSip> sipList;
public List<FusionCamGroup> camGroupList;
public List<FusionCam> camList;
public FusionLightingProperties lightingProperties;
public FusionWindowProperties windowProperties;
}
XML Snippet [XML,我已经离开了浴室区,为了方便起见,删除了其他的]
<?xml version="1.0" encoding="utf-8"?>
<FusionSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<optionList>
<sourceList>
</sourceList>
<zoneGroupList>
<FusionZoneGroup>
<Id>1</Id>
<Name>Fusion</Name>
<Icon>24</Icon>
<Ident />
<ListIndex>0</ListIndex>
</FusionZoneGroup>
<FusionZoneGroup>
<Id>2</Id>
<Name>Demo</Name>
<Icon>23</Icon>
<Ident>Demo</Ident>
<ListIndex>1</ListIndex>
</FusionZoneGroup>
</zoneGroupList>
<zoneList>
<FusionZone>
</FusionZone>
<FusionZone>
</FusionZone>
<FusionZone>
</FusionZone>
<FusionZone>
</FusionZone>
<FusionZone>
<ZoneOptionList>
<FusionZoneOption>
<Id>1</Id>
<Name>Lighting</Name>
<Icon>1</Icon>
<Enabled>0</Enabled>
<ListIndex>0</ListIndex>
</FusionZoneOption>
<FusionZoneOption>
<Id>2</Id>
<Name>Window Treatments</Name>
<Icon>2</Icon>
<Enabled>0</Enabled>
<ListIndex>0</ListIndex>
</FusionZoneOption>
<FusionZoneOption>
<Id>3</Id>
<Name>Climate</Name>
<Icon>3</Icon>
<Enabled>0</Enabled>
<ListIndex>0</ListIndex>
</FusionZoneOption>
<FusionZoneOption>
<Id>4</Id>
<Name>Display</Name>
<Icon>4</Icon>
<Enabled>0</Enabled>
<ListIndex>0</ListIndex>
</FusionZoneOption>
</ZoneOptionList>
<LightingFixtureList />
<LightingSceneList />
<WindowFixtureList />
<LightingKeypadIDs />
<WindowKeypadIDs />
<Id>5</Id>
<Name>Bathroom</Name>
<IconName>Bathroom(M)</IconName>
<IconID>8</IconID>
<ListIndex>2</ListIndex>
<Group>1</Group>
<AVEnable>0</AVEnable>
<AudioOnly>1</AudioOnly>
<ExcludedSources>All Available</ExcludedSources>
</FusionZone>
我的猜测是使用全球化和资源,但我以前从未使用过,如果我能被引导到相关指南,我将不胜感激。
对不起,如果我添加了太多信息。
XmlSerializer
private void OpenFile(string filePath)
{
projProps.fileName = filePath;
try
{
bool proceed = CheckLegacyTypes();
if (!proceed)
{
return;
}
XmlSerializer xmlData = new XmlSerializer(typeof(FusionSystem));
using (StreamReader streamRead = new StreamReader(projProps.fileName))
{
fusionSystem = (FusionSystem) xmlData.Deserialize(streamRead);
}
openFusionSystem();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
.
【问题讨论】: