0

我有一个 xml 文件,它是由这样的块构建的:

<BasicOptions id="OwnCrypt">
    <Font>Angsana New</Font>
    <FontColor>Aquamarine</FontColor>
    <FontSize>12</FontSize>
    <FontStyle>Normál</FontStyle>
    <BackgroundImage>Cryptonite\System\Resources\Media\Pics\grumpy.jpg</BackgroundImage>
    <ImageResolution>1280 X 1024</ImageResolution>
    <FormSize>1280 X 1024</FormSize>
    <FormPosition>CenterParent</FormPosition>
    <Opacity>70</Opacity>
</BasicOptions>

我在一个根元素(名为选项)中制作了六个这样的块。我对节点有一些问题 <FormSize>,因为从选项表单中它可以获得空值(这意味着我不会更改它的分辨率),然后我想将<FormSize>节点的值设置为表单的基本分辨率。这是更新程序按钮事件(如果有帮助的话):

 private void button1_Click(object sender, EventArgs e)
        {
            boxes[0] = checkBox1;
            boxes[1] = checkBox2;
            boxes[2] = checkBox3;
            boxes[3] = checkBox4;
            boxes[4] = checkBox5;
            boxes[5] = checkBox6;
            ArrayList al = new ArrayList();
            ArrayList bl = new ArrayList();
            foreach (CheckBox cb in boxes)
            {
                if (cb.Checked)
                    al.Add(cb.Text);
            }
            if(comboBox1.Text=="")//Betűtípus
            {
                bl.Add("Times New Roman");
            }
            else
                bl.Add(comboBox1.Text);
            if (comboBox2.Text == "")//Betűszín
            {
                bl.Add("Fekete");
            }
            else
                bl.Add(comboBox2.Text);
            bl.Add(numericUpDown1.Value.ToString());//Betűméret
            if (comboBox3.Text == "")//Betűstílus
            {
                bl.Add("Normál");
            }
            else
                bl.Add(comboBox3.Text);
            if (comboBox4.Text == "")//háttérkép
            {
                bl.Add(@"Cryptonite\System\Resources\Media\Pics\grumpy.jpg");
            }
            else
                bl.Add(comboBox4.Text);
            if (comboBox5.Text == "")//háttérkép felbont
            {
                Xml.resRequest(al);
            }
            else
                bl.Add(comboBox5.Text);
            if (comboBox6.Text == "")//felbontás
            {
                Xml.resRequest(al);
            }
            else
                bl.Add(comboBox6.Text);
            if (comboBox7.Text == "")
            {
                bl.Add("WindowsDefault");
            }
            else
                bl.Add(comboBox7.Text);
            bl.Add(numericUpDown2.Value.ToString());
            Xml.Writer(al, bl);
            al.Clear();
            bl.Clear();
        }

它有一个顺序来获取值并提供给 updater 方法,但是如果有人有更好的主意,那让我很高兴。:)

4

1 回答 1

0

我将使用 DTO 对象来存储值并使用内置的序列化程序之一来形成 xml。http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

DTO 类将具有可用于检测是否需要将值设置为默认值的属性。

public class Foo {
  private string _bar;
  public string Bar 
  {
    get { return String.IsNullOrEmpty(_bar) ? _bar = "default value" : _bar; }
    set { _bar = value; }
  } 
}

与其填充 ArrayList,不如填充 DTO。

于 2013-03-09T21:00:45.847 回答