`
ljl_xyf
  • 浏览: 634063 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

s2008下免费图表控件(转载)

阅读更多

1. 前言

Microsoft Chart Controls 是微軟提供,適用於 .NET Framework 3.5 SP1 的 ASP.NET 和 Windows Form 圖表控制項,由於已經有蠻多文章介紹在 ASP.NET 與 Windows Forms 使用 Microsoft Chart Controls,而本文想要來點不一樣的,讓大家知道 Microsoft Chart Controls 也可以在 WPF 使用。

 

2. 前置作業

想要使用 Microsoft Chart Controls,首先當然必須上微軟網站下載與安裝,而關於 Microsoft Chart Controls 會有一些相關的下載

Microsoft Chart Controls for Microsoft .NET Framework 3.5 : Microsoft Chart Controls 主要的安裝程式



 

 

Microsoft Chart Controls for Microsoft .NET Framework 3.5 語言套件 : Microsoft Chart Controls 的相關訊息文字,例如錯誤訊息,目前提供 23 種語言,其中包含繁體中文



 

 

Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008 : 提供 Microsoft Chart Controls 與 Visual Studio 2008 工具箱整合,以及 Microsoft Chart Controls 的 IntelliSense



 

 

3. 使用 Microsoft Chart Controls

首先,新增 WPF 應用程式



 

 

3.1 加入所需 DLL

將所需的 DLL 加入參考中,有以下三個

C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsFormsIntegration.dll : Windows Presentation Foundation WindowsForms Integration Library



 

 

C:\Program Files\Microsoft Chart Controls\Assemblies\System.Windows.Forms.DataVisualization.dll : Microsoft Chart Controls DLL



 

 

System.Windows.Forms.dll



 

 

將參考的DLL加到 namespace 中


 xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"  
 xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"  
 xmlns:CHR="clr-namespace:System.Windows.Forms.DataVisualization.Charting;assembly=System.Windows.Forms.DataVisualization"  
 


xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    xmlns:CHR="clr-namespace:System.Windows.Forms.DataVisualization.Charting;assembly=System.Windows.Forms.DataVisualization"

 

3.2 撰寫 XAML,將 Microsoft Chart Contorls 加入

加入 WindowsFormHost 控制項,原因是 WPF 並沒有辦法直接執行 Windows Forms 的控制項,Forms integration dll 與 WindowsFormHost 可以幫助我們達成。


<Grid>   
      <wfi:WindowsFormsHost x:Name="mainFGrid" >   
   
      </wfi:WindowsFormsHost>   
 </Grid>  
 

<Grid>
        <wfi:WindowsFormsHost x:Name="mainFGrid" >

        </wfi:WindowsFormsHost>
    </Grid>



 

 

在 WindowsFormHost 控制項中加入 Microsoft Chart Controls,就可以開始使用了


<wfi:WindowsFormsHost x:Name="mainFGrid" >
            <CHR:Chart x:Name="mainChart" />
        </wfi:WindowsFormsHost>



 

 

3.3 後端程式碼

這部份先參考 Jeff 的文章 MSChart的基本運用介紹,做出Performance Counter的介面 ,裡面有相當棒的範例,在此繪製 CPU 曲線於 Microsoft Chart Controls,每秒更新一次(http://www.my400800.cn )。


 using System;   
 using System.Collections.Generic;   
 using System.Linq;   
 using System.Text;   
 using System.Windows;   
 using System.Windows.Controls;   
 using System.Windows.Data;   
 using System.Windows.Documents;   
 using System.Windows.Input;   
 using System.Windows.Media;   
 using System.Windows.Media.Imaging;   
 using System.Windows.Navigation;   
 using System.Windows.Shapes;   
   
 using System.Data;   
 using System.Windows.Threading;   
 using System.Diagnostics;   
 using System.Windows.Forms.DataVisualization.Charting;   
   
 namespace WpfApplication1   
 {   
     /// <summary>   
     /// Window1.xaml 的互動邏輯   
     /// </summary>   
     public partial class Window1 : Window   
      {   
         public Window1()   
          {   
              InitializeComponent();   
          }   
   
          DataTable dt = new DataTable();   
   
         private void Window_Loaded(object sender, RoutedEventArgs e)   
          {   
              DispatcherTimer dispatcherTimer = new DispatcherTimer();   
              dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);   
              dispatcherTimer.Interval = new TimeSpan(0, 0, 1);   
              dispatcherTimer.Start();   
   
             //設定DataTable的欄位   
              SetDataTable();   
             //設定Chart Control   
              SetChart();   
   
             this.mainChart.DataSource = dt;   
             this.mainChart.DataBind();//這時候先DataBind()是為了顯示空白的圖表   
          }   
   
         /// <summary>   
         /// 設定DataTable的欄位   
         /// </summary>   
         private void SetDataTable()   
          {   
              dt.Columns.Add("Processor");   
              dt.Columns.Add("Memory");   
   
             //這個動作只是為了能夠在一開始顯示圖表,比例就是30筆   
             for (int i = 0; i < 30; i++)   
              {   
                  DataRow dr = dt.NewRow();   
                  dr["Processor"] = 0;   
                  dt.Rows.Add(dr);   
              }   
          }   
   
         /// <summary>   
         /// 設定Chart Control   
         /// </summary>   
         private void SetChart()   
          {   
              ChartArea ca = new ChartArea("ChartArea1");   
              ca.Area3DStyle.Enable3D = true;//開啟3D   
             this.mainChart.ChartAreas.Add(ca);   
   
             //Processor   
              Legend lgCPU = new Legend("Legend1");   
              lgCPU.IsTextAutoFit = true;   
              lgCPU.Docking = Docking.Bottom;   
             this.mainChart.Legends.Add(lgCPU);   
   
              Series seCPU = new Series("SeriesCPU");   
              seCPU.ChartArea = "ChartArea1";   
              seCPU.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;   
              seCPU.IsVisibleInLegend = true;   
              seCPU.Legend = "Legend1";   
              seCPU.LegendText = "CPU";   
              seCPU.YValueMembers = "Processor";   
             this.mainChart.Series.Add(seCPU);   
          }   
   
          PerformanceCounter pcCPU = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);   
   
         //   System.Windows.Threading.DispatcherTimer.Tick handler   
         //   
         //   Updates the current seconds display and calls   
         //   InvalidateRequerySuggested on the CommandManager to force   
         //   the Command to raise the CanExecuteChanged event.   
         private void dispatcherTimer_Tick(object sender, EventArgs e)   
          {   
             if (dt.Rows.Count > 30)//這動作只是保留顯示30筆即可,不用一直再增加下去   
              {   
                  dt.Rows.RemoveAt(0);   
              }   
              DataRow dr = dt.NewRow();   
   
              dr["Processor"] = pcCPU.NextValue();//比例1:1   
   
              dt.Rows.Add(dr);   
             //因為DataSource在Form Load就設了,所以這裡只要重新DataBind()就可以更新顯示資料,沒重DataBind之前,新資料不會顯示上去   
             this.mainChart.DataBind();   
   
             // Forcing the CommandManager to raise the RequerySuggested event   
              CommandManager.InvalidateRequerySuggested();   
          }   
      }   
 }  
 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

using System.Data;
using System.Windows.Threading;
using System.Diagnostics;
using System.Windows.Forms.DataVisualization.Charting;

namespace WpfApplication1
{
    /// <summary>
    /// Window1.xaml 的互動邏輯
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        DataTable dt = new DataTable();

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            DispatcherTimer dispatcherTimer = new DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();

            //設定DataTable的欄位
            SetDataTable();
            //設定Chart Control
            SetChart();

            this.mainChart.DataSource = dt;
            this.mainChart.DataBind();//這時候先DataBind()是為了顯示空白的圖表
        }

        /// <summary>
        /// 設定DataTable的欄位
        /// </summary>
        private void SetDataTable()
        {
            dt.Columns.Add("Processor");
            dt.Columns.Add("Memory");

            //這個動作只是為了能夠在一開始顯示圖表,比例就是30筆
            for (int i = 0; i < 30; i++)
            {
                DataRow dr = dt.NewRow();
                dr["Processor"] = 0;
                dt.Rows.Add(dr);
            }
        }

        /// <summary>
        /// 設定Chart Control
        /// </summary>
        private void SetChart()
        {
            ChartArea ca = new ChartArea("ChartArea1");
            ca.Area3DStyle.Enable3D = true;//開啟3D
            this.mainChart.ChartAreas.Add(ca);

            //Processor
            Legend lgCPU = new Legend("Legend1");
            lgCPU.IsTextAutoFit = true;
            lgCPU.Docking = Docking.Bottom;
            this.mainChart.Legends.Add(lgCPU);

            Series seCPU = new Series("SeriesCPU");
            seCPU.ChartArea = "ChartArea1";
            seCPU.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
            seCPU.IsVisibleInLegend = true;
            seCPU.Legend = "Legend1";
            seCPU.LegendText = "CPU";
            seCPU.YValueMembers = "Processor";
            this.mainChart.Series.Add(seCPU);
        }

        PerformanceCounter pcCPU = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);

        //  System.Windows.Threading.DispatcherTimer.Tick handler
        //
        //  Updates the current seconds display and calls
        //  InvalidateRequerySuggested on the CommandManager to force 
        //  the Command to raise the CanExecuteChanged event.
        private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            if (dt.Rows.Count > 30)//這動作只是保留顯示30筆即可,不用一直再增加下去
            {
                dt.Rows.RemoveAt(0);
            }
            DataRow dr = dt.NewRow();

            dr["Processor"] = pcCPU.NextValue();//比例1:1

            dt.Rows.Add(dr);
            //因為DataSource在Form Load就設了,所以這裡只要重新DataBind()就可以更新顯示資料,沒重DataBind之前,新資料不會顯示上去
            this.mainChart.DataBind();

            // Forcing the CommandManager to raise the RequerySuggested event
            CommandManager.InvalidateRequerySuggested();
        }
    }
}

程式碼下載

[ChartControl]在 WPF 使用 Microsoft Chart Controls.rar

 

4. 執行結果

 

5. 參考

DOT.Developer Microsoft Chart Controls in a WPF application!

Jeff 隨手記 MSChart的基本運用介紹,做出Performance Counter的介面


  • 大小: 23.5 KB
  • 大小: 20.9 KB
  • 大小: 24.5 KB
  • 大小: 50 KB
  • 大小: 52.9 KB
  • 大小: 41.4 KB
  • 大小: 43.5 KB
  • 大小: 92.8 KB
  • 大小: 73.3 KB
分享到:
评论

相关推荐

    华为命令大全, Quidway S2008B/Quidway S2016B/Quidway S2026B以太网交换机

    华为命令大全,Quidway S2008B/Quidway S2016B/Quidway S2026B以太网交换机 华为命令大全是华为公司提供的一份详细的命令手册,涵盖了Quidway S2008B/Quidway S2016B/Quidway S2026B以太网交换机的所有命令和配置...

    s2008_sp1补丁.zip

    此补丁包的名称为“s2008_sp1补丁.zip”,内含“安装vs2008_sp1补丁”文件,旨在解决用户在使用Visual Studio 2008过程中可能遇到的问题,并引入了对SQL Server的支持。 首先,让我们深入理解Visual Studio 2008 ...

    server 2008 运行库

    1. **vcredist_vs2008.exe**:这是微软提供的一个可分发包,包含了Visual C++ 2008运行时库的公共控件、动态链接库(DLLs)和其他必要的组件。当你尝试运行一个由Visual Studio 2008开发的程序时,如果缺少这些组件...

    华为交换机配置命令大全1.pdf

    在这种需求条件下,以太网接入因其成本低、速度高、使用简单而倍受市场的关注。 1.2 功能特性列表 Quidway S2008B/Quidway S2016B/Quidway S2026B以太网交换机支持以下功能特性: * 宽带小区以太网接入 * 企业网...

    华为交换机操作手册

    《华为交换机操作手册》是华为公司为网络管理员和IT专业人士提供的一份详细指南,主要针对华为S3500系列以太网交换机的配置和管理。这份手册旨在帮助用户充分利用华为交换机的功能,提高网络性能和稳定性,确保网络...

    PTT及其与PET和PBT共混纤维的性能分析 (2008年)

    文章系统对比分析了PTT、PTT/PET、PTT/PBT、高收缩PET及PA5种纤维的拉伸性、回弹性、卷曲性及沸水收缩性。实验表明,PTT纤维具有优良的弹性回复率,PTT/ PET、PTT/PBT纤维的卷曲性和沸水收缩性能更为优异,因此在今后...

    利用802.1X动态VLAN和radius技术组网测试方案

    例如,华为S3328三层交换机和S2008二层交换机均具备这些功能,它们能实现VLAN划分和802.1X协议,同时S3328作为核心层交换机,能处理多台二层交换机的Trunk接入。认证服务器通常选择支持IETF标准的,如Windows 2003...

    华为交换机配置命令大全

    华为交换机配置命令大全主要涵盖了华为公司推出的Quidway系列以太网交换机,包括S2008B、S2016B和S2026...掌握这些命令可以帮助网络管理员高效地配置和优化网络环境,确保网络稳定运行,满足不同场景下的宽带接入需求。

    C# 简单计算器(代码+视图 都有)

    开发者可以添加各种控件(Control),如按钮(Button)、文本框(TextBox)等,通过拖放方式布局界面。每个按钮都有一个事件(Event),如`Click`事件,当用户点击按钮时触发相应的方法。 三、事件驱动编程 事件...

    VS2008背景设置不伤眼

    VS2008默认背景为白色,长久编写代码对于程序员的眼睛会造成一定的伤害,该文件将背景设置为绿色,可以保护程序员的眼睛,有益身体健康!

    华为交换机命令

    例如,在全局视图下可以配置系统参数、VLAN等;在接口视图下可以配置端口属性、速率等;在VLAN视图下则可以创建、删除或修改VLAN。 总之,华为Quidway S2000B系列以太网交换机不仅具备出色的性能指标,而且提供了...

    详解oracle 10g的分区

    SUBPARTITION s2008e VALUES (5, 6), SUBPARTITION s2008w VALUES (7, 8) ) ); ``` 6. **11g 中自动增加新分区**:从 Oracle 11g 开始,支持自动创建新的分区,以适应不断增长的数据需求。 - 示例:创建自动...

    华为以太网交换机vlan disable的功能和配置.doc

    例如,华为的Quidway S3026、S2016和S2008交换机,默认情况下VLAN模式是启用的,即VLAN Enable。在VLAN Enable模式下,交换机会基于VLAN标签进行二层隔离。然而,这些设备硬件限制仅支持32个VLAN,当需要透传的VLAN ...

    Quidway s2000c Bootrom 150

    产品系列 Quidway S2000C 系列交换机 型号 S2008C/S2016C/S2024C BOOTROM版本号 Bootrom150

    高中_09届高三文科数学下册八校联考第二次试卷.doc

    正确答案是“UUC xMxN且ðð”,表示x既属于M又属于N,且这两个集合都在集合U的背景下讨论。 2. **复数的运算**:第二题涉及复数的乘法以及实数的性质。12zz 为实数意味着复数z的共轭乘以其自身的结果是一个...

Global site tag (gtag.js) - Google Analytics