【ZedGraph】基礎

//---------------------------------------------------------

//1、背景透明設置:  
            this.zedGraphControl1.GraphPane.Chart.Fill = newFill(Color.Transparent, Color.Transparent, 45.0f);
            this.zedGraphControl1.MasterPane.Fill = newFill(Color.Transparent, Color.Transparent, 45.0f);
            this.zedGraphControl1.GraphPane.Fill.Color = Color.Transparent;
            //三個背景填充屬性都設置爲透明時背景透明 

            //或者:  
            this.zedGraphControl1.GraphPane.Fill.Color = Color.Transparent;
            this.zedGraphControl1.MasterPane.Fill.IsVisible = false;
            this.zedGraphControl1.GraphPane.Chart.Fill.IsVisible = false;

            //2、座標軸顏色:  
            this.zedGraphControl1.GraphPane.YAxis.Color = Color.Red;
            this.zedGraphControl1.GraphPane.Y2Axis.Color = Color.Red;

            //3、文字及顏色 
            //圖表標題及顏色 
            this.zedGraphControl1.GraphPane.Title.Text = "GraphPane.Title.Text"; 
	    this.zedGraphControl1.GraphPane.Title.FontSpec.FontColor = Color.Blue;
            //座標軸標題及顏色 
            this.zedGraphControl1.GraphPane.XAxis.Title.Text = "GraphPane.XAxis.Title"; 
	    this.zedGraphControl1.GraphPane.XAxis.Title.FontSpec.FontColor = Color.Red;
            //圖表邊框顏色: 
            //內邊框 
            this.zedGraphControl1.GraphPane.Chart.Border.Color = Color.Red;
            //外邊框  
            this.zedGraphControl1.GraphPane.Border = new Border(Color.Red, 0);

            //隱藏外邊框:  
            this.zedGraphControl1.BorderStyle = BorderStyle.None; 
            this.zedGraphControl1.GraphPane.Border.IsVisible = false; 
            this.zedGraphControl1.MasterPane.Border.IsVisible = false;

            //4、座標軸刻度及字體顏色:  
            this.zedGraphControl1.GraphPane.XAxis.Scale.FontSpec.FontColor = Color.White; //改變軸上的刻度標註的顏色;
            this.zedGraphControl1.GraphPane.XAxis.MajorTic.Color = Color.Red; //大刻度顏色
            this.zedGraphControl1.GraphPane.XAxis.MinorTic.Color = Color.Red; //小刻度顏色

            //5、網格及顏色:  
            this.zedGraphControl1.GraphPane.XAxis.MajorGrid.IsVisible = true; 
            this.zedGraphControl1.GraphPane.XAxis.MajorGrid.Color = Color.Gray;
    
	    //6、在對面軸顯示刻度
	    myPane.YAxis.MajorTic.IsOpposite = true;  //對面軸上顯示大刻度
            myPane.YAxis.MinorTic.IsOpposite = false; //對面軸上不顯示小刻度

            //7、曲線標籤位置  
            this.zedGraphControl4.GraphPane.Legend.Position = LegendPos.Right;

            //8、指定要生成的曲線按【YAxis】或【Y2Axis】的刻度描畫
	    double x, y1, y2;
            PointPairList list1 = new PointPairList();
            PointPairList list2 = new PointPairList();
            for (int i = 0; i < 10; i++)
            {
                x = (double)i + 5;
                y1 = 1.5 + Math.Sin((double)i * 0.2);
                y2 = 3.0 * (1.5 + Math.Sin((double)i * 0.2));
                list1.Add(x, y1);
                list2.Add(x, y2);
            }

            LineItem myCurve1 = myPane.AddCurve("Porsche", list1, Color.Red, SymbolType.Diamond);
            //myCurve1.IsYAxis = true; //默認按【YAxis】的刻度描畫
            LineItem myCurve2 = myPane.AddCurve("Piper", list2, Color.Blue, SymbolType.Circle);
            myCurve2.IsY2Axis = true;  //手動改爲按【Y2Axis】的刻度描畫

            zedGraphControl1.AxisChange();
            zedGraphControl1.Invalidate();
以上內容爲部分轉載 + 個人總結。 轉載:http://wenku.baidu.com/link?url=2DjaOfrzc8BoR5jNQQ6skYkMiCfOzgeeFmCTsg6KLq7n24I3Cz57Rw-qDHqDkQIzFPFRybx6-a-eMgB2R20lSCUP_QW3tOS_SrafD_WZcwm
//-----------------------------------------------------------

Chart

ChartBorder

圖表區域的邊框設置

ChartFill

圖表區域的背景填充

Legend

圖表的註釋標籤顯示設置項目,一組數據對應一種顏色的註釋

IsHStack

當有多個顯示項的時候設置 Y 軸數據是疊加的還是分開的

Xaxis

圖表區域的 X 軸相關信息設置

AxisColor

座標軸顏色

Cross

座標的原點,可以設置座標的偏移程度

CrossAuto

原點自動設置:True 的話 Cross 的設置就無效了。

FontSpec

X 軸標題字體相關信息

Angle

X 軸標題字體顯示時候的角度,0爲水平 90爲垂直

Fill

X 軸標題字體填充信息

ColorOpacity

透明度

IsScaled

設置 X 軸標題字體顯示大小是否根據圖的比例放大縮小

RangeMax

填充時候的最大傾斜度(有過渡色,沒試過)

RangeMin

填充時候的最小傾斜度(有過渡色,沒試過)

StringAlignment

X 軸標題字體排列(不清楚,沒試過)

IsOmitMag

是否顯示指數冪(10次方,沒試過,似乎與 IsUseTenPower 有關係)

IsPreventLabelOverlap

座標值顯示是否允許重疊,如果False的話,控件會根據座標值長度自動消除部分座標值的顯示狀態

IsShowTitle

X 軸標題是否顯示

IsTicsBetweenLabels

兩個座標值之間是否自動顯示分隔標誌

IsUseTenPower

是否使用10次冪指數

IsZeroLine

當數據爲0時候是否顯示(在餅狀圖顯示的時候有用)

IsVisible

是否顯示 X 軸

MajorGrid

大跨度的 X 軸表格虛線線顯示信息

DashOff

虛線中孔間距

DashOn

虛線單位長度

MajorTic

大跨度的 X 軸刻度信息

IsInside

在 Chart 內部是否顯示

IsOutSide

在 Chart 外部是否顯示

IsOpposite

在對面的軸上是否顯示

MinorGrid

小跨度的 X 軸表格虛線顯示信息

MinorTic

小跨度的 x 軸刻度信息

MinSpace

刻度和軸之間的距離(沒試過)

Scale

刻度值的一些設定

IsReverse

X 軸的刻度值從高到低還是從低到高

MajorStep

大刻度步長

MajorStepAuto

是否自動設置大刻度步長

MajorUnit

大刻度步長單位

Max

刻度最大值

MaxAuto

根據輸入數據自動設置刻度最大值

Min

刻度最小值

MinAuto

根據輸入數據自動設置刻度最小值

MinGrace

不清楚,沒試過

MinorStep

小刻度步長

MinorStepAuto

是否自動設置小刻度步長

MinorUnit

小刻度單位

Type

數據顯示方式

Liner

直接現實(自動)

Date

按日期方式顯示

Log

按指數冪方式顯示

Ordinal

順序顯示

Y2Axis

第二個 Y 軸座標信息顯示(具體設置看 X 軸)

Yaxis

第一個 Y 軸座標信息顯示(具體設置看 X 軸)

BarBase

在生成柱狀圖的時候設置柱狀是基於 X 軸還是其他軸

BarType

柱狀的類型疊加或其他。

IsFontsScaled

圖比例變化時候圖表上的文字是否跟着自動縮放

IsIgnoreInitial

是否忽略初始值

IsIgnoreMissing

是否忽略缺省值

IsPenWidthScaled

圖比例變化時候圖表上的畫筆的粗細是否跟着自動縮放

IsShowTitle

圖表標題是否顯示

PaneFill

Pane 的一些填充信息

BaseDimension

縮放比例基數(可以試試效果)

IsImageMap

不清楚幹嗎用的

AxisChaneged

是否允許自動繪圖(沒試過,一般都 true,動態繪圖)

CacheDuration

Cache 保存時間0

OutputFormat

輸出格式

RenderedImagePath

輸出路徑

RenderMode

輸出模式,不太清楚一般都是 ImageTag,另一個輸出的是亂碼不是圖片。對於圖表而言,一般是三種表現形式:柱狀圖、餅狀圖和點線圖。

//-----------------------------------------------------------
//附:在vs中使用ZedGraph控件的一些記錄(轉)
//
//幾個注意點:
//
//圖片的保存路徑設置:RenderedImagePath 屬性中設置,程序對該文件夾應該是有寫和修改權限的
//
//圖片的輸出格式:OutputFormat 屬性中設置,Png 的推薦,比較清晰。


////--------------------------------------------------------------------------------------------------
//myPane.YAxis.MajorGrid.IsZeroLine = false;   // Don't display the Y zero line
// (填充數據點)
// myCurve.Symbol.Fill = new Fill(Color.White);

//聲明畫筆

//GraphPane myPane = zgc.GraphPane;

// 設定座標組

//PointPairList list1 = new PointPairList();


//zgc.PointValueEvent += new ZedGraphControl.PointValueHandler(MyPointValueHandler); //修改右鍵 


//先清除
//zedChart.GraphPane.CurveList.Clear();  
//zedChart.GraphPane.GraphItemList.Clear();   
//重新繪製
//zedChart.AxisChange();
//zedChart.Refresh();
//刷新控件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using ZedGraph;

namespace zedGraphControl
{
    /// <summary>豐元自定義圖表控件
    /// 豐元自定義圖表控件
    /// </summary>
    public partial class zedGraphControl : UserControl
    {
        /// <summary>構造函數
        /// 構造函數
        /// </summary>
        public zedGraphControl()
        {
            InitializeComponent();
 
           
        }

        /// <summary>
        /// 控件ZedGraphControl 代理
        /// </summary>
        public GraphPane myPane;

        #region ZedGraph屬性設置
        /// <summary>屬性設置
        /// 屬性設置
        /// </summary>
        public virtual void CreateChartAttribute()
        {
            myPane = zedGraphControl1.GraphPane;
            myPane.Title.Text = Title;
            myPane.Title.FontSpec.FontColor = TitleColor;
            myPane.IsPenWidthScaled = IsPenWidthScaled;
            myPane.TitleGap = TitleGrap;
            myPane.Chart.Fill = new Fill(BackFillColor1, BackFillColor2,BackColorFillAngle);
            //myPane.Y2Axis.IsVisible = ISY2Visble;
            //myPane.X2Axis.IsVisible = ISX2Visble;
            myPane.YAxis.Scale.FontSpec.FontColor = Y1ScaleColor;
            myPane.Y2Axis.Scale.FontSpec.FontColor = Y2ScaleColor;
            myPane.XAxis.Scale.FontSpec.FontColor = X1ScaleColor;
            myPane.X2Axis.Scale.FontSpec.FontColor = X2ScaleColor;
            myPane.Legend.IsVisible = IsLegendVisible;
            myPane.XAxis.MajorGrid.IsVisible = IsXGraidVisble;
            myPane.YAxis.MajorGrid.IsVisible = IsYGraidVisble;

            myPane.XAxis.MajorTic.IsOpposite = IsX2MaxScale;
            myPane.XAxis.MinorTic.IsOpposite = IsX2MinScale;
            myPane.X2Axis.MajorTic.IsOpposite = IsX1MaxScale;
            myPane.X2Axis.MinorTic.IsOpposite = IsX1MinScale;

            myPane.YAxis.MajorTic.IsOpposite = IsY2MaxScale;
            myPane.YAxis.MinorTic.IsOpposite = IsY2MinScale;
            myPane.Y2Axis.MajorTic.IsOpposite = IsY1MaxScale;
            myPane.Y2Axis.MinorTic.IsOpposite = IsY1MinScale;

            myPane.XAxis.Scale.FontSpec.Size = X1ScaleSize;

            myPane.X2Axis.Scale.FontSpec.Size = X2ScaleSize;
    
            myPane.YAxis.Title.Text = Y1Title;
            myPane.YAxis.Title.FontSpec.FontColor = Y1TitleColor;
            myPane.Y2Axis.Title.Text = Y2Title;
            myPane.Y2Axis.Title.FontSpec.FontColor = Y2TitleColor;
            myPane.XAxis.Title.Text = X1Title;
            myPane.XAxis.Title.FontSpec.FontColor = X1TitleColor;
            myPane.XAxis.Title.IsVisible = IsX1TitleVisble;
            myPane.X2Axis.Title.IsVisible = IsX2TitleVisble;
            myPane.YAxis.Scale.FontSpec.Size = Y1ScaleSize;
            myPane.Y2Axis.Scale.FontSpec.Size = Y2ScaleSize;
            myPane.YAxis.Title.FontSpec.Size = Y1TitleSize;
            myPane.Y2Axis.Title.FontSpec.Size = Y2TitleSize;
            myPane.Legend.FontSpec.Size = LegendSize;
            myPane.Legend.FontSpec.Family = LegendFamily;
            myPane.Legend.FontSpec.IsUnderline = IsUnderLine;
            myPane.Legend.FontSpec.IsItalic = IsItaLinc;
            myPane.Legend.FontSpec.IsBold = IsBold;
            myPane.Legend.FontSpec.FontColor = LegendColor;
            myPane.Legend.Fill = new Fill(LegendBackGroundColor1, LegendBackGroundColor2,LegendBackGroundColor3);
            myPane.Legend.Gap = LegendGap;
            myPane.Legend.IsHStack = IsHStack;
            myPane.Legend.IsReverse = IsReverse;
            myPane.Legend.IsShowLegendSymbols = IsShowLegendSymbols;
            myPane.Legend.FontSpec.IsDropShadow = IsDropShadow;
            myPane.Legend.FontSpec.DropShadowColor = DropShadowColor;
            myPane.Legend.FontSpec.DropShadowOffset = DropShadowOffset;
            myPane.Legend.Position = (ZedGraph.LegendPos)Position;
            myPane.BarSettings.ClusterScaleWidthAuto = CylinderWidthAuto;
            myPane.BarSettings.ClusterScaleWidth = CylinderWidth;
            zedGraphControl1.Y1Y2 = Y1Y2;
            myPane.Legend.Border.IsVisible =BorderVisible;
        

        }
        private bool _Y1Y2 = false;
        /// <summary>
        /// 顯示圖表值是y1和x1軸的值或是y1、y2和x1 的值
        /// </summary>
        public bool Y1Y2
        {
            get { return _Y1Y2; }
            set { _Y1Y2 = value; }
        }
        /// <summary>
        /// 顯示值針的值
        /// </summary>
        /// <param name="IsShowCursorValues">bool</param>
        public void IsShowCursorValues(bool IsShowCursorValues)
        {

            zedGraphControl1.IsShowCursorValues = IsShowCursorValues;

        }
        /// <summary>
        /// 顯示節點的值
        /// </summary>
        /// <param name="IsShowPointValues"></param>
        public void IsShowPointValues(bool IsShowPointValues)
        {

            zedGraphControl1.IsShowPointValues = IsShowPointValues;

        }
        /// <summary>
        /// 隱藏或顯示菜單
        /// </summary>
        /// <param name="IsMenu">bool</param>
        public void IsShowContextMenu(bool IsMenu)
        {
            zedGraphControl1.IsEnableHZoom = IsMenu;
            zedGraphControl1.IsEnableVZoom = IsMenu;
            zedGraphControl1.IsShowContextMenu = IsMenu;
        }
        #endregion
        #region 設置X軸的刻度值的大小
        //設置X軸的刻度值的大小
        private float x1scalesize = 8;
        /// <summary>
        /// 設置X軸的刻度值的大小
        /// </summary>
        public float X1ScaleSize
        {
            get { return x1scalesize; }
            set { x1scalesize = value; }
        }
        #endregion


        #region 設置X2軸的刻度值的大小
        //設置X2軸的刻度值的大小
        private float x2scalesize = 8;
        /// <summary>
        /// 設置X2軸的刻度值的大小
        /// </summary>
        public float X2ScaleSize
        {
            get { return x2scalesize; }
            set { x2scalesize = value; }
        }
        #endregion


        #region   圖表標題
        //圖表標題
        private string title = "豐元科技";
        /// <summary>
        /// 圖表標題
        /// </summary>
        public string Title
        {
            get { return title; }
            set { title = value; }
        }
        #endregion
        #region 圖表的背景填充顏色
        //圖表的背景填充顏色
        private Color backFillColor1 = Color.White;
        /// <summary>
        /// 圖表的背景填充顏色
        /// </summary>

        public Color BackFillColor1
        {
            get { return backFillColor1; }
            set { backFillColor1 = value; }
        }
        #endregion
        #region 圖表的背景填充顏色
        //圖表的背景填充顏色
        private Color backFillColor2 = Color.FromArgb(255, 255, 166);
        /// <summary>
        /// 圖表的背景填充顏色
        /// </summary>
        public Color BackFillColor2
        {
            get { return backFillColor2; }
            set { backFillColor2 = value; }
        }
        #endregion
        #region 圖表背景填充顏色角度
        //圖表背景填充顏色角度
        private float backcolorFillAngle = 45f;
        /// <summary>
        /// 圖表背景填充顏色角度
        /// </summary>
        public float BackColorFillAngle
        {
            get { return backcolorFillAngle; }
            set { backcolorFillAngle = value; }
        }
        #endregion
       
        #region 圖表的刻度邊框加粗
        //圖表的刻度邊框加粗
        private bool isPenWidthScaled = false;
        /// <summary>
        /// 圖表的刻度邊框加粗
        /// </summary>
        public bool IsPenWidthScaled
        {
            get { return isPenWidthScaled; }
            set { isPenWidthScaled = value; }

        }
        #endregion
        #region 圖表標題與X2軸的距離
        //圖表標題與X2軸的距離
        private float titleGap = 1;
        /// <summary>
        /// 圖表標題與X2軸的距離
        /// </summary>
        public float TitleGrap
        {
            get { return titleGap; }
            set { titleGap = value; }
        }
        #endregion
       
        #region 是否顯示Y2軸
        //是否顯示Y2軸
        private bool isY2visble = false;
        /// <summary>
        /// 是否顯示Y2軸
        /// </summary>
        public bool ISY2Visble
        {
            get { return isY2visble; }
            set { isY2visble = value; }
        }
        #endregion
        #region 是否顯示X2軸
        //是否顯示X2軸
        private bool isx2visble = false;
        /// <summary>
        /// 是否顯示X2軸
        /// </summary>
        public bool ISX2Visble
        {
            get { return isx2visble; }
            set { isx2visble = value; }
        }
        #endregion
        #region 是否顯示X1軸的標題
        //是否顯示X1軸的標題
        private bool isX1TitleVisble = false;
        /// <summary>
        /// 是否顯示X1軸的標題
        /// </summary>
        public bool IsX1TitleVisble
        {
            get { return isX1TitleVisble; }
            set { isX1TitleVisble = value; }
        }
        #endregion
        #region 是否顯示X2軸的標題
        //是否顯示X2軸的標題
        private bool isX2TitleVisble = false;
        /// <summary>
        /// 是否顯示X2軸的標題
        /// </summary>
        public bool IsX2TitleVisble
        {
            get { return isX2TitleVisble; }
            set { isX2TitleVisble = value; }
        }
        #endregion
        #region 設置Y1軸的刻度值的顏色
        private Color Y1scalecolor = Color.Black;
        /// <summary>
        /// 設置Y1軸的刻度值的顏色
        /// </summary>
        public Color Y1ScaleColor
        {
            get { return Y1scalecolor; }
            set { Y1scalecolor = value; }
        }
        #endregion
        #region 設置Y2軸的刻度值顏色
        private Color Y2scalecolor = Color.Black;
        /// <summary>
        /// 設置Y2軸的刻度值顏色
        /// </summary>
        public Color Y2ScaleColor
        {
            get { return Y2scalecolor; }
            set { Y2scalecolor = value; }
        }
        #endregion
        #region 設置X1軸的刻度值顏色
        private Color X1scalecolor = Color.Black;
        /// <summary>
        /// 設置X1軸的刻度值顏色   
        /// </summary>
        public Color X1ScaleColor
        {
            get { return X1scalecolor; }
            set { X1scalecolor = value; }
        }
        #endregion
        #region 設置X2軸的刻度值顏色
        private Color X2scalecolor = Color.Black;
        /// <summary>
        /// 設置X2軸的刻度值顏色
        /// </summary>
        public Color X2ScaleColor
        {
            get { return X2scalecolor; }
            set { X2scalecolor = value; }
        }
        #endregion
        #region 是否顯示圖例
        //是否顯示圖例
        private bool Islegendvisible = true;
        /// <summary> 是否顯示圖例
        /// 
        /// </summary>
        public bool IsLegendVisible
        {
            get { return Islegendvisible; }
            set { Islegendvisible = value; }
        }

        #endregion
        #region 顯示X軸網格
        //顯示X軸網格
        private bool IsXgridvisible = true;
        /// <summary>
        /// 顯示X軸網格
        /// </summary>
        public bool IsXGraidVisble
        {
            get { return IsXgridvisible; }
            set { IsXgridvisible = value; }
        }

        #endregion
        #region 顯示Y軸網格
        //顯示Y軸網格
        private bool IsYgridvisible = true;
        /// <summary>
        /// 顯示Y軸網格
        /// </summary>
        public bool IsYGraidVisble
        {
            get { return IsYgridvisible; }
            set { IsYgridvisible = value; }
        }
        #endregion
        #region 圖表標題顏色
        //圖表標題顏色
        private Color titlecolor = Color.Black;
        /// <summary>
        /// 圖表標題顏色
        /// </summary>
        public Color TitleColor
        {
            get { return titlecolor; }
            set { titlecolor = value; }
        }
        #endregion
        #region Y1軸是否顯示小刻度
        //Y1軸是否顯示小刻度
        private bool isy1minscale = false;
        /// <summary> Y1軸是否顯示小刻度
        ///  
        /// </summary>
        public bool IsY1MinScale
        {
            get { return isy1minscale; }
            set { isy1minscale = value; }
        }
        #endregion
        #region Y2軸是否顯示小刻度
        //Y2軸是否顯示小刻度
        private bool isy2minscale = false;
        /// <summary> Y2軸是否顯示小刻度
        ///  
        /// </summary>
        public bool IsY2MinScale
        {
            get { return isy2minscale; }
            set { isy2minscale = value; }
        }
        #endregion
        #region Y1軸是否顯示大刻度
        //Y1軸是否顯示大刻度
        private bool isy1maxscale = true;
        /// <summary> 
        /// Y1軸是否顯示大刻度
        /// </summary>
        public bool IsY1MaxScale
        {
            get { return isy1maxscale; }
            set { isy1maxscale = value; }
        }
        #endregion
        #region Y2軸是否顯示大刻度
        //Y2軸是否顯示大刻度
        private bool isy2maxscale = true;
        /// <summary> Y2軸是否顯示大刻度
        ///  
        /// </summary>
        public bool IsY2MaxScale
        {
            get { return isy2maxscale; }
            set { isy2maxscale = value; }
        }
        #endregion
        #region X1軸是否顯示小刻度
        //X1軸是否顯示小刻度
        private bool isx1minscale = false;
        /// <summary> X1軸是否顯示小刻度
        ///  
        /// </summary>
        public bool IsX1MinScale
        {
            get { return isx1minscale; }
            set { isx1minscale = value; }
        }
        #endregion
        #region X2軸是否顯示小刻度
        //X2軸是否顯示小刻度
        private bool isx2minscale = false;
        /// <summary> X2軸是否顯示小刻度
        ///  
        /// </summary>
        public bool IsX2MinScale
        {
            get { return isx2minscale; }
            set { isx2minscale = value; }
        }
        #endregion
        #region X1軸是否顯示大刻度
        //X1軸是否顯示大刻度
        private bool isx1maxscale = true;
        /// <summary> X1軸是否顯示大刻度
        /// 
        /// </summary>
        public bool IsX1MaxScale
        {
            get { return isx1maxscale; }
            set { isx1maxscale = value; }
        }
        #endregion
        #region X2軸是否顯示大刻度
        //X2軸是否顯示大刻度
        private bool isx2maxscale = true;
        /// <summary> X2軸是否顯示大刻度
        ///  
        /// </summary>
        public bool IsX2MaxScale
        {
            get { return isx2maxscale; }
            set { isx2maxscale = value; }
        }
        #endregion
       
        #region 設置Y1軸的標題
        //設置Y1軸的標題
        private string y1Title = "Y軸";
        /// <summary>
        /// 設置Y1軸的標題
        /// </summary>
        public string Y1Title
        {
            get { return y1Title; }
            set { y1Title = value; }
        }
        #endregion
        #region 設置Y2軸的標題
        //設置Y2軸的標題
        private string y2Title = "Y2軸";
        /// <summary>
        /// 設置Y2軸的標題
        /// </summary>
        public string Y2Title
        {
            get { return y2Title; }
            set { y2Title = value; }
        }
        #endregion
        #region 設置Y1軸的標題顏色
        //設置Y1軸的標題顏色
        private Color y1TitleColor = Color.Black;
        /// <summary>
        /// 設置Y1軸的標題顏色
        /// </summary>
        public Color Y1TitleColor
        {
            get { return y1TitleColor; }
            set { y1TitleColor = value; }
        }
        #endregion
        #region 設置Y2軸的標題顏色
        //設置Y2軸的標題顏色
        private Color y2TitleColor = Color.Black;
        /// <summary>
        /// 設置Y2軸的標題顏色
        /// </summary>
        public Color Y2TitleColor
        {
            get { return y2TitleColor; }
            set { y2TitleColor = value; }
        }
        #endregion
        #region 設置X1軸的標題
        //設置X1軸的標題
        private string x1Title = "X軸";
        /// <summary>
        /// 設置X1軸的標題
        /// </summary>
        public string X1Title
        {
            get { return x1Title; }
            set { x1Title = value; }
        }
        #endregion
        #region 設置X1軸的標題顏色
        //設置X1軸的標題顏色
        private Color x1TitleColor = Color.Black;
        /// <summary>
        /// 設置X1軸的標題顏色
        /// </summary>
        public Color X1TitleColor
        {
            get { return x1TitleColor; }
            set { x1TitleColor = value; }
        }
        #endregion
        #region 設置X1軸的值傾斜度
        //設置X1軸的值傾斜度
        private float x1scaleAngle = 70f;
        /// <summary>
        /// 設置X1軸的值傾斜度
        /// </summary>
        public float X1ScaleAngle
        {
            get { return x1scaleAngle; }
            set { x1scaleAngle = value; }
        }
        #endregion
        #region 設置X1軸的標題大小
        //設置X1軸的標題大小
        private float x1titlesize = 8;
        /// <summary>
        /// 設置X1軸的標題大小
        /// </summary>
        public float X1TitleSize
        {
            get { return x1titlesize; }
            set { x1titlesize = value; }
        }
        #endregion
        #region 設置Y1軸刻度值字體的大小
        //設置Y1軸刻度值字體的大小
        private float y1ScaleSize = 8;
        /// <summary>
        /// 設置Y1軸刻度值字體的大小
        /// </summary>
        public float Y1ScaleSize
        {
            get { return y1ScaleSize; }
            set { y1ScaleSize = value; }
        }
        #endregion
        #region 設置Y2軸刻度值字體的大小
        //設置Y2軸刻度值字體的大小
        private float y2ScaleSize = 8;
        /// <summary>
        /// 設置Y2軸刻度值字體的大小
        /// </summary>
        public float Y2ScaleSize
        {
            get { return y2ScaleSize; }
            set { y2ScaleSize = value; }
        }
        #endregion
        #region 設置Y3軸刻度值字體的大小
        //設置Y3軸刻度值字體的大小
        private float y3ScaleSize = 8;
        /// <summary>
        /// 設置Y3軸刻度值字體的大小
        /// </summary>
        public float Y3ScaleSize
        {
            get { return y3ScaleSize; }
            set { y3ScaleSize = value; }
        }
        #endregion
        #region 設置Y1軸標題字體大小
        //設置Y1軸標題字體大小
        private float y1titleSize = 10;
        /// <summary>
        /// 設置Y1軸標題字體大小
        /// </summary>
        public float Y1TitleSize
        {
            get { return y1titleSize; }
            set { y1titleSize = value; }
        }
        #endregion
        #region 設置Y2軸標題字體大小
        //設置Y2軸標題字體大小
        private float y2titleSize = 10;
        /// <summary>
        /// 設置Y2軸標題字體大小
        /// </summary>
        public float Y2TitleSize
        {
            get { return y2titleSize; }
            set { y2titleSize = value; }
        }

        #endregion
        #region 設置Y3軸標題字體大小
        //設置Y3軸標題字體大小
        private float y3titleSize = 10;
        /// <summary>
        /// 設置Y3軸標題字體大小
        /// </summary>
        public float Y3TitleSize
        {
            get { return y3titleSize; }
            set { y3titleSize = value; }
        }
        #endregion
        #region 設置圓柱的寬度
        //設置圓柱的寬度
        private double cylinderWidth = 0.5;
        /// <summary>
        /// 設置圓柱的寬度
        /// </summary>
        public double CylinderWidth
        {
            get { return cylinderWidth; }
            set { cylinderWidth = value; }
        }
        #endregion
        #region 設置圓柱寬度是否是自動更改
        //設置圓柱寬度是否是自動更改
        private bool cylinderwidthauto = false;
        /// <summary>
        /// 設置圓柱寬度是否是自動更改
        /// </summary>
        public bool CylinderWidthAuto
        {
            get { return cylinderwidthauto; }
            set { cylinderwidthauto = value; }
        }
        #endregion
        //以下是圖例的屬性設置
        #region 設置圖例的字體大小
        //設置圖例的字體大小
        private float legendsize = 10;
        /// <summary>
        /// 設置圖例的字體大小
        /// </summary>
        public float LegendSize
        {
            get { return legendsize; }
            set { legendsize = value; }
        }

        #endregion
        #region 設置圖例字體
        //設置圖例字體
        private string legendfamily = "宋體";
        /// <summary>
        /// 設置圖例字體
        /// </summary>
        public string LegendFamily
        {
            get { return legendfamily; }
            set { legendfamily = value; }
        }
        #endregion
        #region 圖例字體是否帶下劃線
        //圖例字體是否帶下劃線
        private bool isunderline = false;
        /// <summary>
        /// 圖例字體是否帶下劃線
        /// </summary>
        public bool IsUnderLine
        {
            get { return isunderline; }
            set { isunderline = value; }
        }


        #endregion
        #region 圖例字體是否傾斜
        //圖例字體是否傾斜
        private bool isitalinc = false;
        /// <summary>
        /// 圖例字體是否傾斜
        /// </summary>
        public bool IsItaLinc
        {
            get { return isitalinc; }
            set { isitalinc = value; }
        }


        #endregion
        #region 圖例字體是否加粗
        //圖例字體是否加粗
        private bool isbold = false;
        /// <summary>
        /// 圖例字體是否加粗
        /// </summary>
        public bool IsBold
        {
            get { return isbold; }
            set { isbold = value; }
        }


        #endregion
        #region 圖例字體顏色
        //圖例字體顏色
        private Color legendcolor = Color.Black;
        /// <summary>
        /// 圖例字體顏色
        /// </summary>
        public Color LegendColor
        {
            get { return legendcolor; }
            set { legendcolor = value; }
        }


        #endregion
        #region 圖例背景填充顏色
        //圖例背景填充顏色
        private Color legendbackgroundcolor1 = Color.White;
        /// <summary>
        /// 圖例背景填充顏色
        /// </summary>
        public Color LegendBackGroundColor1
        {
            get { return legendbackgroundcolor1; }
            set { legendbackgroundcolor1 = value; }
        }


        #endregion
        #region 圖例背景填充顏色
        //圖例背景填充顏色
        private Color legendbackgroundcolor2 = Color.White;
        /// <summary>
        /// 圖例背景填充顏色
        /// </summary>
        public Color LegendBackGroundColor2
        {
            get { return legendbackgroundcolor2; }
            set { legendbackgroundcolor2 = value; }
        }


        #endregion
        #region 圖例背景填充顏色
        //圖例背景填充顏色
        private Color legendbackgroundcolor3 = Color.White;
        /// <summary>
        /// 圖例背景填充顏色
        /// </summary>
        public Color LegendBackGroundColor3
        {
            get { return legendbackgroundcolor3; }
            set { legendbackgroundcolor3 = value; }
        }


        #endregion
        #region 圖例與圖表之間的距離
        //圖例與圖表之間的距離
        private float legendGap = 0.5f;
        /// <summary>
        /// 圖例與圖表之間的距離
        /// </summary>
        public float LegendGap
        {
            get { return legendGap; }
            set { legendGap = value; }
        }


        #endregion
        #region 圖例是否以水平的形式出現
        //圖例是否以水平的形式出現
        private bool ishstack = true;
        /// <summary>
        /// 圖例是否以水平的形式出現
        /// </summary>
        public bool IsHStack
        {
            get { return ishstack; }
            set { ishstack = value; }
        }


        #endregion
        #region 圖例是否降序排列
        //圖例是否降序排列
        private bool isreverse = false;
        /// <summary>
        /// 圖例是否降序排列
        /// </summary>
        public bool IsReverse
        {
            get { return isreverse; }
            set { isreverse = value; }
        }


        #endregion
        #region 圖例是否展示樣本
        //圖例是否展示樣本
        private bool isShowLegendSymbols = true;
        /// <summary>
        /// 圖例是否展示樣本
        /// </summary>
        public bool IsShowLegendSymbols
        {
            get { return isShowLegendSymbols; }
            set { isShowLegendSymbols = value; }
        }


        #endregion
        #region 圖例是否顯示陰影
        //圖例是否顯示陰影
        private bool isDropShadow = false;
        /// <summary>
        /// 圖例是否顯示陰影
        /// </summary>
        public bool IsDropShadow
        {
            get { return isDropShadow; }
            set { isDropShadow = value; }
        }


        #endregion
        #region 圖例陰影顏色
        //圖例陰影顏色
        private Color dropShadowColor = Color.Red;
        /// <summary>
        /// 圖例陰影顏色
        /// </summary>
        public Color DropShadowColor
        {
            get { return dropShadowColor; }
            set { dropShadowColor = value; }
        }


        #endregion
        #region 圖例陰影填充位置
        //圖例陰影填充位置
        private float dropShadowOffset = 0.009f;
        /// <summary>
        /// 圖例陰影填充位置
        /// </summary>
        public float DropShadowOffset
        {
            get { return dropShadowOffset; }
            set { dropShadowOffset = value; }
        }


        #endregion
        #region 是否顯示圖例邊框
        private bool borervisible = false;
        /// <summary>
        /// 是否顯示圖例邊框
        /// </summary>
        public bool BorderVisible
        {
            get { return borervisible; }
            set { borervisible = value; }
        }
        #endregion
        #region 圖例顯示的位置
        //圖例顯示的位置
        private LegendPos legendpos = LegendPos.Top;
        /// <summary>
        /// 圖例顯示的位置
        /// </summary>
        public LegendPos Position
        {
            get { return legendpos; }
            set { legendpos = value; }
        }

        #endregion
        private void zedGraphControl1_Load(object sender, EventArgs e)
        {

            CreateChartAttribute();
        }
        #region 設置LineItem的SymbolType的類型
        // 設置LineItem的SymbolType的類型
        private SymbolType st = SymbolType.Circle;
        /// <summary>
        /// 設置LineItem的SymbolType的類型
        /// </summary>
        public SymbolType Type
        {
            get { return st; }
            set { st = value; }
        }
        #endregion
        #region 設置LineItem的SymbolTypeSize的大小
        // 設置LineItem的SymbolTypeSized的大小
        private float stsize = 2f;
        /// <summary>
        /// 設置LineItem的SymbolTypeSized的大小
        /// </summary>
        public float SymbolTypeSize
        {
            get { return stsize; }
            set { stsize = value; }
        }
        #endregion
        #region 設置LineItem的LineSize的大小
        // 設置LineItem的LineSize的大小
        private float linesize = 2f;
        /// <summary>
        /// 設置LineItem的LineSize的大小
        /// </summary>
        public float LineSize
        {
            get { return linesize; }
            set { linesize = value; }
        }
        #endregion
        #region 設置LineItem線條是否是圓滑的
        //設置LineItem線條是否是圓滑的
        private bool issmooth = true;
        /// <summary>
        /// 設置LineItem線條是否是圓滑的
        /// </summary>
        public bool IsSmooth
        {
            get { return issmooth; }
            set { issmooth = value; }
        }
        #endregion
       
        /// <summary>
        /// 設置X軸顯示的時間是否爲爲長格式
        /// </summary>
        private bool longtime = false;
        /// <summary>
        /// 設置X軸顯示的時間是否爲爲長格式
        /// </summary>
        public bool LongTime
        {
            get { return longtime; }
            set { longtime = value; }
        }
        /// <summary>
        /// 設置X軸的步長
        /// </summary>
        private double step_x = 0;
        /// <summary>
        /// 設置X軸的步長
        /// </summary>
        public double Step_X
        {
            get { return step_x; }
            set
            {
                step_x = value;
            }
        }
        
        
        
        
        
        
        
        
        
        
        
    
        #region 畫曲線 參數dt 中必須有2個字段 時間、數值.
        /// <summary>
        /// 畫曲線 參數dt 中必須有2個字段 時間、數值.
        /// </summary>
        /// <param name="dt">二維表</param>
        /// <param name="columndatetime">列名爲的類型爲datetime類型</param>
        /// <param name="columnvalue">列的值必須是數值</param>
        /// <param name="dtbig">設置X軸的最大時間</param>
        /// <param name="dtsmall">設置X軸的最小時間</param>
        /// <param name="LineItemName">曲線名稱</param>
        /// <param name="ItemBelongY">曲線所屬於哪個Y軸(其值已經值定 1,2)</param>
        /// <param name="LineColor">曲線顏色</param>

        public void DarwLineItem(DataTable dt, string columndatetime, string columnvalue, DateTime dtbig, DateTime dtsmall, string LineItemName, int ItemBelongY, Color LineColor)
        {
            zedGraphControl1_Load(null, null);
            LineItem li;
            double ybig = 0;
            double ysmall = 0;
            double yy =0;
            
            PointPairList ppl = new PointPairList();//把座標點放到這裏
            if (dt.Rows[0][columnvalue] != DBNull.Value)
            {
                ybig = double.Parse(dt.Rows[0][columnvalue].ToString());
            }
            if (dt.Rows[0][columnvalue] != DBNull.Value)
            {
                ysmall = double.Parse(dt.Rows[0][columnvalue].ToString());
            }
            if(dt.Rows.Count>=2)
            foreach(DataRow dr in dt.Rows)
            {
             if(dr[columnvalue]!=DBNull.Value && dr[columnvalue]>=0)
             {
              YY =  double.Parse(dr[columnvalue].ToString());
             }
             esle
             {
              MessageBox.show("數據庫中有非法值"); 
             }
            }
            
            if(YY > 0)
            {
              foreach (DataRow dr in dt.Rows)
              {
                  if (dr[columnvalue] != DBNull.Value)
                  {
                      if (ybig < double.Parse(dr[columnvalue].ToString()))
                      {
                          ybig = double.Parse(dr[columnvalue].ToString());
                      }
                      if (ysmall > double.Parse(dr[columnvalue].ToString()))
                      {
                          ysmall = double.Parse(dr[columnvalue].ToString());
                      }
  
                      XDate xdate = new XDate(Convert.ToDateTime(dr[columndatetime]));
                      ppl.Add(xdate, double.Parse(dr[columnvalue].ToString()));
                  }
              }
          }
            if (ybig == ysmall)
            {
             if(Ysmall>1)
             {
                ysmall = ysmall-(ysmall-1);   //原代碼 ysmall = ysmall-1   2011-04-05 hetao改
                ybig = ybig + 5;   //源代碼 ybig = ybig+1   2011-04-05 hetao改
              }
              else
              {
               ysmall = ysmmll;
               Ybig=Ygig+5;
              }
            }
            ybig = ybig / 5 + ybig;
            
           //添加曲線


            li = myPane.AddCurve(LineItemName, ppl, LineColor, Type);
            li.Symbol.Fill = new Fill(LineColor);  //填充數據點
            li.Symbol.Size = SymbolTypeSize;
            if ( LongTime == true)
            {
                myPane.XAxis.Scale.Format = "yyyy-MM-dd HH:mm ";
            }
            else
            {
                myPane.XAxis.Scale.Format = "yyyy-MM-dd";
            }
        
             XDate x = new XDate(dtsmall);
             myPane.XAxis.Scale.Min = x;
             myPane.XAxis.Scale.BaseTic = x;  //指明第一個主刻度標籤標記的位置

             x = new XDate(dtbig);
             myPane.XAxis.Scale.Max = x;        //X 軸上的最大刻度
             myPane.XAxis.Type = AxisType.Date; //數據顯示方式    Date按日期方式顯示


             
             myPane.XAxis.Scale.MajorStepAuto = false;//是否自動設置大刻度步長
             if (Step_X != 0)
             {
                 myPane.XAxis.Scale.MajorStep = Step_X;
                 myPane.XAxis.Scale.MinorStep = Step_X;
             }
            

         
            li.IsOverrideOrdinal = true;//以x軸上的刻度爲準,而不是以X軸上的刻度爲0的位置開始劃  (ture 是從X軸由下向上畫,False反之)     
            li.Line.IsSmooth = IsSmooth;
            li.Line.Width = LineSize;
            if (ItemBelongY == 2)
            {
                li.IsY2Axis = true; 把這個曲線對應Y2軸
                ISY2Visble = true;
                myPane.Y2Axis.IsVisible = ISY2Visble;
                if (ybig == 0 && ysmall == 0)
                {
                    myPane.Y2Axis.Scale.Max = ybig+1;
                    myPane.Y2Axis.Scale.Min = ysmall;
                    myPane.YAxis.Scale.BaseTic = 0;


                }
                else
                {
                    myPane.Y2Axis.Scale.Max = ybig;
                    myPane.Y2Axis.Scale.Min = ysmall;
                    myPane.YAxis.Scale.BaseTic = 0;//第一個主刻度從哪裏開始

                }
            }
            else if (ItemBelongY == 1)
            {
                li.IsYAxis = true; 把這個曲線對應Y2軸
                ISYVisble = true;
                myPane.YAxis.IsVisible = ISYVisble;
                if(ybig ==0 && ysmall==0)
                {
                   myPane.YAxis.Scale.Max = ybig+1;
                   myPane.YAxis.Scale.Min = ysmall;
                   myPane.YAxis.Scale.BaseTic = 0;
                }else
                {
                  myPane.YAxis.Scale.Max = ybig;
                   myPane.YAxis.Scale.Min = ysmall;
                   myPane.YAxis.Scale.BaseTic = 0; 
                }

            }
            myPane.XAxis.Scale.FontSpec.Angle = X1ScaleAngle;
            myPane.XAxis.Title.FontSpec.Size = X1TitleSize;
       
            myPane.AxisChange();// 在數據變化時繪製圖形

            this.zedGraphControl1.Refresh();
           
        }
        #endregion
        
        
        
        
        
        
        
       

        #region 清空圖表中所有線圖和柱狀圖
        /// <summary>
        /// 清空圖表中所有線圖和柱狀圖
        /// </summary>
        public void LineItemList()
        {
            myPane.CurveList.Clear();
        }
        #endregion 
 


        #region  畫線段 X軸時間 ,自動獲取Y軸的最大值和最小值
        /// <summary>
        ///  畫線段 X軸時間,自動獲取X軸的大小值,自動獲取Y軸的最大值和最小值      
        /// </summary>
        /// <param name="dt">二維表</param>      
        /// <param name="columnXname">二維表中要顯示X軸上數據的列名</param>
        /// <param name="columnYname">二維表中要顯示Y軸上數據的列名</param>       
        /// <param name="ItemBelongY">依賴於哪個Y軸</param>
        /// <param name="LineName">曲線的名字</param>
        /// <param name="LineColor">曲線顏色</param>
        public void CreateChartLineItem(DataTable dt, string columnXname, string columnYname, int ItemBelongY, string LineName, Color LineColor)
        {
            zedGraphControl1_Load(null, null);
            LineItem li;
            PointPairList ppl = new PointPairList();
            double ybig = 0;
            double ysmall = 0;
            double temp = 0;
            XDate xdate;
           
            DateTime xmax;
            DateTime xmin;
            if (dt.Rows[0][columnYname] != DBNull.Value)
            {
                ybig = double.Parse(dt.Rows[0][columnYname].ToString());
                ysmall = double.Parse(dt.Rows[0][columnYname].ToString());
                temp = ybig;
             
                xmax = DateTime.Parse(dt.Rows[0][columnXname].ToString());
                xmin = DateTime.Parse(dt.Rows[0][columnXname].ToString());
            }
            else { MessageBox.Show("沒有您要的數據記錄!"); return; }
            foreach (DataRow dr in dt.Rows)
            {

                if (dr[columnYname] != DBNull.Value)
                {

                    if (ybig < double.Parse(dr[columnYname].ToString()))
                    {
                        ybig = double.Parse(dr[columnYname].ToString());
                    }
                    if (ysmall >= double.Parse(dr[columnYname].ToString()))
                    {
                        ysmall = double.Parse(dr[columnYname].ToString());
                    }
                    if (xmax < DateTime.Parse(dr[columnXname].ToString()))
                    {
                        xmax = DateTime.Parse(dr[columnXname].ToString());
                    }
                    if (xmin >= DateTime.Parse(dr[columnXname].ToString()))
                    {
                        xmin = DateTime.Parse(dr[columnXname].ToString());
                    }
                    if (temp == double.Parse(dr[columnYname].ToString()))
                    {
                        xdate = new XDate(DateTime.Parse((dr[columnXname].ToString())));
                        ppl.Add(xdate, double.Parse(dr[columnYname].ToString()));
                    }
                    else
                    {

                        { li = myPane.AddCurve("", ppl, LineColor, Type); }
                        li.Symbol.Fill = new Fill(LineColor);
                        li.Symbol.Size = SymbolTypeSize;
                        li.IsOverrideOrdinal = true;//以x軸上的刻度爲準,而不是以X軸上的刻度爲0的位置開始劃       
                        li.Line.IsSmooth = IsSmooth;
                        li.Line.Width = LineSize;
                        if (ItemBelongY == 2)
                        {
                            li.IsY2Axis = true;
                            ISY2Visble = true;
                            myPane.Y2Axis.IsVisible = ISY2Visble;

                            myPane.Y2Axis.Scale.Max = ybig + 1;
                            if (ysmall != 0)
                            {
                                myPane.Y2Axis.Scale.Min = ysmall - 1;
                            }
                            else { myPane.Y2Axis.Scale.Min = ysmall; }

                        }
                        else if (ItemBelongY == 1)
                        {
                            myPane.YAxis.Scale.Max = ybig + 1;
                            if (ysmall != 0)
                            {
                                myPane.YAxis.Scale.Min = ysmall - 1;
                            }
                            else
                            {
                                myPane.YAxis.Scale.Min = ysmall;
                            }
                        }
                        ppl = new PointPairList();
                        xdate = new XDate(Convert.ToDateTime(dr[columnXname]));
                        ppl.Add(xdate, double.Parse(dr[columnYname].ToString()));
                        temp = double.Parse(dr[columnYname].ToString());

                    }
                }


            }
            li = myPane.AddCurve(LineName, ppl, LineColor, Type);
            li.Symbol.Fill = new Fill(LineColor);
            li.Symbol.Size = SymbolTypeSize;
            li.IsOverrideOrdinal = true;//以x軸上的刻度爲準,而不是以X軸上的刻度爲0的位置開始劃       
            li.Line.IsSmooth = IsSmooth;
            li.Line.Width = LineSize;
            if (LongTime == true)
            {
                myPane.XAxis.Scale.Format = "yyyy-MM-dd HH:mm ";
            }
            else
            {
                myPane.XAxis.Scale.Format = "yyyy-MM-dd";
            }

            XDate x = new XDate(xmin);
            myPane.XAxis.Scale.Min = x;
            myPane.XAxis.Scale.BaseTic = x;
            x = new XDate(xmax);
            myPane.XAxis.Scale.Max = x;
            myPane.XAxis.Type = AxisType.Date;
            myPane.XAxis.Scale.MajorStepAuto = false;
            if (Step_X != 0)
            {
                myPane.XAxis.Scale.MajorStep = Step_X;
                myPane.XAxis.Scale.MinorStep = Step_X;
            }

            if (ybig == ysmall)
            {
                ysmall = ysmall - 1;
                ybig = ybig + 1;
            }

            myPane.XAxis.Scale.FontSpec.Angle = X1ScaleAngle;
            myPane.XAxis.Title.FontSpec.Size = X1TitleSize;
            myPane.AxisChange();
            this.zedGraphControl1.Refresh();
        }
        #endregion


        #region 枚舉信息操作
        public enum LegendPos
        {
          
            Top,
        
            Left,
      
            Right,
     
            Bottom,
         
            InsideTopLeft,
         
            InsideTopRight,
        
            InsideBotLeft,
        
            InsideBotRight,
        
            Float,
        
            TopCenter,
        
            BottomCenter,
       
            TopFlushLeft,
           
            BottomFlushLeft

        }

        #endregion

    }
}

轉載:http://www.cnblogs.com/beeone/archive/2011/04/21/2023110.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章