彩票走势图

TeeChart Pro .Net汉化教程三:自定义序列化

原创|其它|编辑:郝浩|2012-07-04 20:54:27.000|阅读 569 次

概述:TeeChart可自动的处理所有必须的Serialization步骤,它允许对TeeChart进行保存和调用。它包括图表及其Series所有修正的元素。TeeChart Series提供了很多您所需的功能,但是在使用Series时,您可能想要将它修改为包括了您自己信息的附加部分,以便将Series公开、生效或被其他应用程序所引用,为了达到此目的,您也许希望从一个TeeChart Serie创建您自己的SeriesType,并添加您自己定义的元素。TeeChart的定制序列化可保存(序列化)及恢复这些元素。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

TeeChart可自动的处理所有必须的Serialization步骤,它允许对TeeChart进行保存和调用。它包括图表及其Series所有修正的元素。TeeChart Series提供了很多您所需的功能,但是在使用Series时,您可能想要将它修改为包括了您自己信息的附加部分,以便将Series公开、生效或被其他应用程序所引用,为了达到此目的,您也许希望从一个TeeChart Serie创建您自己的SeriesType,并添加您自己定义的元素。TeeChart的定制序列化可保存(序列化)及恢复这些元素。

请注意: 自定义的保存分为2种技术:

  • 已知类型的序列化 (例如:string, int, double)
  • 自定义(未知)类型的序列化

序列化定制Series

已知类型的序列化 (eg. string, int, double)

定义一个定制Series

现在假设您希望从TeeChart的Line Series中得到一个Series。Line Series包括了您所需的功能,但是您希望添加一些元素来实现追踪目的或作为增值的项目与任何特定数据集相关联。

以下是关于如何定义从一个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; }
  }
}

 保存及导入

您可以填充您的自定义变量并保存图表,当重新导入已保存的图表时这些自定义变量也会被导入。如果该变量是已知系统类型那么则不需要进行额外的步骤。TeeChart将会处理序列化和反序列化。

Eg. 保存已修改Series的图表

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");
}

导入已修改Series的图表

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 将在保存图表前显示设定的值。

自定义(未知)类型的序列化

通过定制对象来定义Custom Series

通过使用定制项目的元素创建Custom Series类似于使用已知类型的元素来创建Serie。

下面是从Line Series得到一个Series的范例,Line Series包括了已知及未知类型(MyObj)的新元素。由于TeeChart不知道如何序列化和反序列化未知类型的Serie,所有我们需要提供一个您可通过写程序来实现它的方法,并在序列化/反序列化时调用该方法。 该方法是通过继承Steema.TeeChart.Export.TemplateExport.ICustomSerialization 接口中的类来实现. 该方法要求在你的类中添加两个方法:
- 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; }
   }
}

注意序列化使用 'info.AddValue'来保存自定义元素的值。反序列化根据所要保存变量的类型使用'info.Getxxxx'。

保存及导入

一旦您已经在您定制的类中填充程序,用来实现序列化及反序列化您自定义元素,那么就前面所描述的未更改图表来说,图表保存及加载可通过相同的方式来调用,

Eg.
保存已修改Series的图表

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");
}

导出已修改Series的图表

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 将在保存图表前显示设定的值。

自定义图表的序列化

该步骤必须从这些适用的Custom Series来自定义的图表。

从Steema.TeeChart.Chart派生您的自定义图表,将它标记为Serializable,并将其设为ICustomSerialization类(见以下示例)。就如上面的Series范例,对已知类型的序列化不需要进行任何步骤。对于未知的类型,我们将使用与Series 范例MyObj中相同的对象,

例如:有已知和未知自定义变量的示例图表

[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"));
  }
}

在保存图表时Serialisation可自动进行处理。

例如:序列化

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");
}

反序列化要求一个额外的步骤,TeeChart的反序列要求MyChart与序列化图表绑定,而不是默认类型的图表。

注意设置绑定的代码:

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

例如:反序列化

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");
}


(慧都控件网版权所有,转载请注明出处,否则追究法律责任)
标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP