1

だから私は自分のチャート、ラベル、テキストボックス、コンボボックスをシリアル化しようとしています.

public static void Serialise(Control c, string XmlFileName, List<SampleFileObject> sampleObj) {
  XmlTextWriter xmlSerialisedForm = new XmlTextWriter(XmlFileName, System.Text.Encoding.Default);
  xmlSerialisedForm.Formatting = Formatting.Indented;
  xmlSerialisedForm.WriteStartDocument();
  xmlSerialisedForm.WriteStartElement("ChildForm");
  // enumerate all controls on the form, and serialise them as appropriate
  AddChildControls(xmlSerialisedForm, c);
  AddSampleList(xmlSerialisedForm, sampleObj);
  xmlSerialisedForm.WriteEndElement(); // ChildForm
  xmlSerialisedForm.WriteEndDocument();
  xmlSerialisedForm.Flush();
  xmlSerialisedForm.Close();
}

private static void AddChildControls(XmlTextWriter xmlSerialisedForm, Control c) {
  foreach (Control childCtrl in c.Controls) {
    if (!(childCtrl is Label)) {
      // serialise this control
      xmlSerialisedForm.WriteStartElement("Control");
      xmlSerialisedForm.WriteAttributeString("Type", childCtrl.GetType().ToString());
      xmlSerialisedForm.WriteAttributeString("Name", childCtrl.Name);
      if (childCtrl is TextBox) {
        xmlSerialisedForm.WriteElementString("Text", ((TextBox)childCtrl).Text);
      } else if (childCtrl is ComboBox) {
        xmlSerialisedForm.WriteElementString("Text", ((ComboBox)childCtrl).Text);
        xmlSerialisedForm.WriteElementString("SelectedIndex", ((ComboBox)childCtrl).SelectedIndex.ToString());
      } else if (childCtrl is ListBox) {
        // need to account for multiply selected items
        ListBox lst = (ListBox)childCtrl;
        if (lst.SelectedIndex == -1) {
          xmlSerialisedForm.WriteElementString("SelectedIndex", "-1");
        } else {
          for (int i = 0; i < lst.SelectedIndices.Count; i++) {
            xmlSerialisedForm.WriteElementString("SelectedIndex", (lst.SelectedIndices[i].ToString()));
          }
        }
      } else if (childCtrl is CheckBox) {
        xmlSerialisedForm.WriteElementString("Checked", ((CheckBox)childCtrl).Checked.ToString());
      }
      else if (childCtrl is Chart)
      {

        ((Chart)childCtrl).Serializer.Content = SerializationContents.Appearance;
        ((Chart)childCtrl).Serializer.SerializableContent += ",DataPoint.AxisLabel, Series.AxisLabels, Series.Name, ChartArea.Name";
        ((Chart)childCtrl).Serializer.Save(xmlSerialisedForm);
      }

それが重要な部分だと思います。

ありがとう

4

0 に答える 0