2013-03-09 2 views
0

У меня есть файл XML, который был построен из блоков, как это:Как я могу изменить пользовательский 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> 

Я сделал шесть из этих блоков в корневом элементе (именованные Options). У меня есть некоторая проблема с узлом , потому что в форме параметров он может получить пустое значение (что означает, что я не изменяю его разрешение), а затем я хотел бы установить значение узла <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(); 
     } 

Это имеет порядок, чтобы получить значения и дать методу утилиты обновления, но если кто-нибудь имеет лучшее представление о том, что делает меня очень счастливым. :)

+0

так какая проблема у вас на самом деле есть .. что произойдет, если шрифт не имеет значения .. это влияет на разрешение экрана>? если это звучит так, как вам нужно создать статическое значение по умолчанию для использования, если шрифт окажется пустым – MethodMan

+0

Если он пуст, то формы не получают значения w и h. если это означает, что у них будет основное разрешение, которое было установлено в визуальной студии, тогда у меня нет проблем. – NeverJr

+0

Тогда вы можете уточнить, какова фактическая проблема, так как вы заявили что-то о ''? – MethodMan

ответ

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.

Смежные вопросы