• <menu id="w2i4a"></menu>
  • logo TeeChart .NET教程2018
    文檔首頁(yè)>>TeeChart .NET教程2018>>【TeeChart .NET教程】(十九):自定義序列化

    【TeeChart .NET教程】(十九):自定義序列化


    【下載TeeChart.Net最新版本】

    注意

    自定義序列化是一個(gè)高級(jí)主題,它提供了正確保存和恢復(fù)開(kāi)發(fā)人員設(shè)計(jì)的自定義元素的選項(xiàng),這些自定義元素可能與TeeChart自己的功能集相關(guān)但不在其中,Steema將自定義序列化所能提供的支持限制在本教程中概述的技術(shù)范圍內(nèi)。

    (一)介紹

    1.1 自動(dòng)序列化

    TeeChart自動(dòng)處理所有必要的序列化步驟,以允許保存和調(diào)用TeeChart。這包括圖表及其系列的所有修改元素。

    1.2 自定義序列化(自定義元素的序列化)

    TeeChart系列提供用戶需要的大部分功能,但用戶希望對(duì)其進(jìn)行修改以包含自己的其他信息,以便系列發(fā)布或采取行動(dòng)或在使用該系列時(shí)提供應(yīng)用程序其他部分的參考。為此,可能希望創(chuàng)建自己的SeriesType,從TeeChart系列派生,添加自己的自定義元素。TeeChart的自定義序列化允許保存(序列化)和恢復(fù)這些元素。

    請(qǐng)注意:保存自定義元素分為兩種技術(shù):

    • 已知類型的序列化(例如,字符串,整數(shù),雙精度)
    • 自定義(未知)類型的序列化

    (三)序列化自定義系列

    3.1 已知類型的序列化(例如,string,int,double)定義自定義系列

    假設(shè)用戶希望從TeeChart的系列中獲得系列,線系列包含需要的功能,但希望添加一些元素用于跟蹤目的或作為與任何特定數(shù)據(jù)集關(guān)聯(lián)的增值對(duì)象,以下是如何定義派生自Line Series的Custom Series的示例:

    public class MyLine : Steema.TeeChart.Styles.Line 
    { 
      public MyLine(Chart c) : base(c) 
      { 
        myStrVar = "default"; 
      } 
     
      public MyLine() : this((Chart)null) { } 
     
      private string myStrVar = ""; 
      private int myIntVar = 0; 
     
      public string MyStrProp 
      { 
        get { return myStrVar; } 
        set { myStrVar = value; } 
      } 
     
      public int MyIntProp 
      { 
        get { return myIntVar; } 
        set { myIntVar = value; } 
      } 
    }
    

    3.2 保存并導(dǎo)出

    您可以填充自定義變量并保存圖表,并在重新導(dǎo)入已保存的圖表時(shí)導(dǎo)入它們,只要變量屬于已知的系統(tǒng)類型(例如String,Integer,Double),就不需要額外的步驟。TeeChart將處理序列化和反序列化,例如:保存帶有修改系列的圖表

    private void button1_Click(object sender, EventArgs e) 
    { 
      MyLine mLine=new MyLine(); 
     
      mLine.MyStrProp = "now set"; 
      mLine.MyIntProp = 43; 
     
      tChart1.Series.Add(mLine); 
      mLine.FillSampleValues(); 
     
      tChart1.Export.Template.Save(@"c:\files\customLine.ten"); 
    }
    

    導(dǎo)入帶有修改系列的圖表

    private void button1_Click(object sender, EventArgs e) 
    private void button2_Click(object sender, EventArgs e) 
    { 
      tChart1.Clear(); 
      tChart1.Import.Template.Load(@"c:\files\customLine.ten"); 
      label1.Text = ((MyLine)(tChart1[0])).MyStrProp; 
      label2.Text = ((MyLine)(tChart1[0])).MyIntProp.ToString(); 
    }
    

    Label1和Label2將顯示保存圖表之前設(shè)置的值。

    (四)自定義(未知)類型的序列化

    4.1 使用自定義對(duì)象定義自定義系列

    使用自定義對(duì)象的元素創(chuàng)建自定義系列的步驟與具有已知類型元素的系列的步驟類似,以下是從Line Series派生的Series的示例,其中包括已知和未知類型的新元素(MyObj),由于TeeChart不知道如何序列化和反序列化未知類型,我們需要提供一種機(jī)制,您可以編寫(xiě)例程來(lái)執(zhí)行此操作并在序列化/反序列化時(shí)調(diào)用它。通過(guò)從Steema.TeeChart.Export.TemplateExport.ICustomSerialization接口繼承該類來(lái)提供該機(jī)制,這要求您向類添加2個(gè)方法:

    • public void Serialize(SerializationInfo info)
    • public void DeSerialize(SerializationInfo info)
    using Steema.TeeChart.Export; 
     
    // Custom Line class 
    public class MyLine : Steema.TeeChart.Styles.Line, TemplateExport.ICustomSerialization 
    { 
      public MyLine(Chart c) : base(c) 
      { 
        myStrVar = "default"; 
      } 
     
      public MyLine() : this((Chart)null) { } 
     
      private string myStrVar = ""; 
      private int myIntVar = 0; 
      private MyObj myMyObj; 
     
      public string MyStrProp 
      { 
        get { return myStrVar; } 
        set { myStrVar = value; } 
      } 
     
      public int MyIntProp 
      { 
        get { return myIntVar; } 
        set { myIntVar = value; } 
      } 
     
      /// <summary> 
      /// Method to ease population of the myMyObj variable. 
      /// </summary> 
      public void setMyObj(int i, string s) 
      { 
        myMyObj = new MyObj(i, s); 
      } 
     
      /// <summary> 
      /// Property of Custom type, MyObj 
      /// </summary> 
      public MyObj MyObj 
      { 
        get { return myMyObj; } 
        set { myMyObj = value; } 
      } 
     
      /// <summary> 
      /// Obligatory method (TemplateExport.ICustomSerialization interface) 
      /// </summary> 
      public void Serialize(SerializationInfo info) 
      { 
        //save custom elements  
        info.AddValue("myObjStr", myMyObj.MyString, myMyObj.MyString.GetType()); 
        info.AddValue("myObjInt", myMyObj.MyInt); 
      } 
     
      /// <summary> 
      /// Obligatory method (TemplateExport.ICustomSerialization interface) 
      /// </summary> 
      public void DeSerialize(SerializationInfo info) 
      { 
        //recover custom elements into the myMyObj variable 
        myMyObj = new MyObj(info.GetInt32("myObjInt"), info.GetString("myObjStr")); 
      } 
    } 
     
    //custom object 
    public class MyObj 
    { 
      private string myString; 
      private int myInt; 
     
      public MyObj(int i, string s) 
      { 
        myString = s; 
        myInt = i; 
      } 
     
      public int MyInt 
      { 
        get { return myInt; } 
        set { myInt = value; } 
      } 
     
      public string MyString 
      { 
        get { return myString; } 
        set { myString = value; } 
      } 
    }

    請(qǐng)注意,序列化使用'info.AddValue'來(lái)保存自定義元素的值,反序列化根據(jù)要保存的變量的類型使用“info.Getxxxx”。

    4.2 保存并導(dǎo)入

    一旦填充了自定義類中的例程以序列化和反序列化自定義元素,就可以像調(diào)用未修改的圖表一樣調(diào)用圖表保存和加載,如前所示,例如:保存帶有修改系列的圖表

    private void button1_Click(object sender, EventArgs e) 
    { 
      MyLine mLine=new MyLine(); 
     
      mLine.MyStrProp = "now set"; 
      mLine.MyIntProp = 43; 
      mLine.setMyObj(43, "set val 43"); 
     
      tChart1.Series.Add(mLine); 
      mLine.FillSampleValues(); 
     
      tChart1.Export.Template.Save(@"c:\files\customLine.ten"); 
    }

    導(dǎo)入帶有修改系列的圖表

    private void button2_Click(object sender, EventArgs e) 
    { 
      tChart1.Clear(); 
      tChart1.Import.Template.Load(@"c:\files\customLine.ten"); 
      label1.Text = ((MyLine)(tChart1[0])).MyStrProp; 
      label2.Text = ((MyLine)(tChart1[0])).MyIntProp.ToString(); 
      label3.Text = ((MyLine)(tChart1[0])).MyObj.MyInt.ToString(); 
      label4.Text = ((MyLine)(tChart1[0])).MyObj.MyString; 
    }

    Label1,Label2,Label3和Label4將顯示保存圖表之前設(shè)置的值。

    (五)序列化自定義圖表

    序列化自定義圖表所需的步驟與應(yīng)用于自定義系列的步驟略有不同,從Steema.TeeChart.Chart中導(dǎo)出自定義圖表,將其標(biāo)記為Serializable并將其設(shè)置為ICustomSerialization類(請(qǐng)參閱下面的示例),已知類型將序列化,無(wú)需您執(zhí)行上述系列示例中的任何必需步驟,對(duì)于未知類型的示例,我們將使用與Series示例MyObj中相同的對(duì)象。例如:包含已知和未知類型的自定義變量的示例圖表

    [System.Serializable()] 
    public class MyChart : Steema.TeeChart.Chart, TemplateExport.ICustomSerialization  
    { 
      private MyObj myMyObj; 
     
      public MyChart() : base() { } 
     
      //required constructor 
      protected MyChart(SerializationInfo info, StreamingContext context) : base(info, context) { } 
     
      private string myStrVar = ""; 
      private int myIntVar = 0; 
     
      public string MyStrProp 
      { 
        get { return myStrVar; } 
        set { myStrVar = value; } 
      } 
     
      public int MyIntProp 
      { 
        get { return myIntVar; } 
        set { myIntVar = value; } 
      } 
     
      public void setMyObj(int i, string s) 
      { 
        myMyObj = new MyObj(i, s); 
      } 
     
      public MyObj MyObj 
      { 
        get { return myMyObj; } 
        set { myMyObj = value; } 
      } 
     
      //required method 
      public void Serialize(SerializationInfo info) 
      { 
        object o = myMyObj.MyString; 
        info.AddValue("myObjStr", o, o.GetType()); 
        info.AddValue("myObjInt", myMyObj.MyInt); 
      } 
     
      //required method 
      public void DeSerialize(SerializationInfo info) 
      { 
        myMyObj = new MyObj(info.GetInt32("myObjInt"), info.GetString("myObjStr")); 
      } 
    }

    保存圖表時(shí)會(huì)自動(dòng)處理序列化,例如:Serialise

    private void button1_Click(object sender, EventArgs e) 
    { 
      MyChart myChart = new MyChart(); 
      myChart.Series.Add(new Steema.TeeChart.Styles.Bar()); 
      myChart[0].FillSampleValues(); 
      myChart.setMyObj(22, "set 22"); 
      myChart.MyStrProp = "set String Prop"; 
      myChart.Export.Template.IncludeData = true; 
      myChart.Export.Template.Save(@"c:\files\customChart.ten"); 
    }

    反序列化需要一個(gè)額外的步驟,TeeChart的反序列化器將MyChart類型綁定到序列化圖表,而不是圖表,因?yàn)樗悄J(rèn)類型,請(qǐng)注意設(shè)置活頁(yè)夾的行:

    myChart.Import.Template.CustomType = myChart.ToString();

    例如:DeSerialise

    private void button2_Click(object sender, EventArgs e) 
    { 
      MyChart myChart = new MyChart(); 
      myChart.Import.Template.CustomType = myChart.ToString(); 
      myChart = (MyChart)(myChart.Import.Template.Load(@"c:\files\customChart.ten")); 
      myChart.Header.Text = myChart.MyObj.MyString; 
      myChart.Footer.Text = myChart.MyStrProp; 
      myChart.Footer.Visible = true; 
      myChart.Export.Template.Save(@"c:\files\testCustomChartmodded.ten"); 
      myChart.Export.Image.PNG.Save(@"c:\files\testCustomChart.png"); 
    }
    
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();