【C#】C# System.Windows.Forms.DataVisualization Demo案例
CrazyPanda发表于:2024-02-01 23:12:07浏览:286次
简介
DataVisualization 其实就是Winform 中自带的 Chart 控件,整个图形控件主要由以下几个部份组成:
1.Annotations --图形注解集合
2.ChartAreas --图表区域集合
3.Legends --图例集合
4.Series --图表序列集合(即图表数据对象集合)
5.Titles --图标的标题集合
每个集合具体介绍,可以参考下面的帖子,看完了介绍,一定对你理解这个插件大有裨益。
C#(99):微软Charting图表控件 System.Web.UI.DataVisuliztion.Charting - springsnow - 博客园
一、新建一个项目
WPF 其实也可以用,写法差不了太多,这里用 Winfrom 作为演示。
引入 System.Windows.Forms.DataVisualization DLL
二、界面和代码
下面是运行后的样子
另外还加了一个定时器
Form1.cs
using System; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private Chart chart; private int sum = 0; private void Form1_Load(object sender, EventArgs e) { InitChart(); comboBox1.SelectedIndex = 2; //三条线 //for (int i = 0; i < 3; i++) //{ // AddSeries("line", Color.Red); //} //一条线 AddSeries("line", Color.Red); } private void InitChart() { CreateChart(); chart.ChartAreas[0].AxisX.ScaleView.Scroll(ScrollType.Last); timer.Interval = 500; } private void AddSeries(string seriersName, Color serierscolor) { Series series = new Series(seriersName); //图表类型 设置为样条图曲线 series.ChartType = SeriesChartType.Line; series.IsXValueIndexed = true; series.XValueType = ChartValueType.Time; series.MarkerStyle = MarkerStyle.Circle; series.MarkerColor = Color.Black; //设置点的大小 series.MarkerSize = 5; //设置曲线的颜色 series.Color = serierscolor; //设置曲线宽度 series.BorderWidth = 2; series.CustomProperties = "PointWidth=2"; series.IsValueShownAsLabel = true; chart.Series.Add(series); } private void CreateChart() { chart = new Chart(); this.panel1.Controls.Add(chart); chart.Dock = DockStyle.Fill; chart.Visible = true; ChartArea chartArea = new ChartArea(); //chartArea.Name = "FirstArea"; chartArea.CursorX.IsUserEnabled = true; chartArea.CursorX.IsUserSelectionEnabled = true; chartArea.CursorX.SelectionColor = Color.SkyBlue; chartArea.CursorY.IsUserEnabled = true; chartArea.CursorY.AutoScroll = true; chartArea.CursorY.IsUserSelectionEnabled = true; chartArea.CursorY.SelectionColor = Color.SkyBlue; chartArea.CursorX.IntervalType = DateTimeIntervalType.Auto; chartArea.AxisX.ScaleView.Zoomable = false; chartArea.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.All;//启用X轴滚动条按钮 //chartArea.BackColor = Color.BlueViolet; //背景色 chartArea.BackSecondaryColor = Color.White; //渐变背景色 chartArea.BackGradientStyle = GradientStyle.TopBottom; //渐变方式 chartArea.BackHatchStyle = ChartHatchStyle.None; //背景阴影 chartArea.BorderDashStyle = ChartDashStyle.NotSet; //边框线样式 chartArea.BorderWidth = 1; //边框宽度 chartArea.BorderColor = Color.Black; chartArea.AxisX.MajorGrid.Enabled = true; chartArea.AxisY.MajorGrid.Enabled = true; // Axis chartArea.AxisY.Title = @"Value"; chartArea.AxisY.LineWidth = 2; chartArea.AxisY.LineColor = Color.Black; chartArea.AxisY.Enabled = AxisEnabled.True; chartArea.AxisX.Title = @"Time"; chartArea.AxisX.IsLabelAutoFit = true; chartArea.AxisX.LabelAutoFitMinFontSize = 5; chartArea.AxisX.LabelStyle.Angle = -15; chartArea.AxisX.LabelStyle.IsEndLabelVisible = true; //show the last label chartArea.AxisX.Interval = 10; chartArea.AxisX.IntervalAutoMode = IntervalAutoMode.FixedCount; chartArea.AxisX.IntervalType = DateTimeIntervalType.NotSet; chartArea.AxisX.TextOrientation = TextOrientation.Auto; chartArea.AxisX.LineWidth = 2; chartArea.AxisX.LineColor = Color.Black; chartArea.AxisX.Enabled = AxisEnabled.True; chartArea.AxisX.ScaleView.MinSizeType = DateTimeIntervalType.Months; chartArea.AxisX.Crossing = 0; chartArea.Position.Height = 85; chartArea.Position.Width = 85; chartArea.Position.X = 0; chartArea.Position.Y = 13; chart.ChartAreas.Add(chartArea); chart.BackGradientStyle = GradientStyle.TopBottom; //图表的边框颜色、 chart.BorderlineColor = Color.FromArgb(26, 59, 105); //图表的边框线条样式 chart.BorderlineDashStyle = ChartDashStyle.Solid; //图表边框线条的宽度 chart.BorderlineWidth = 2; //图表边框的皮肤 chart.BorderSkin.SkinStyle = BorderSkinStyle.Emboss; } private void button_Stop_Click(object sender, EventArgs e) { switch (button_Stop.Text) { case "Stop": { button_Stop.Text = "Start"; timer.Stop(); break; } case "Start": { button_Stop.Text = "Stop"; timer.Start(); break; } } } private void timer_Tick(object sender, EventArgs e) { sum++; Random ra = new Random(); DateTime nowTime = DateTime.Now; if (chart.Series.Count <= 0) { return; } for (int i = 0; i < chart.Series.Count; i++) { Series series = chart.Series[i]; string value = ra.Next(1, 10).ToString(); series.Points.AddXY(nowTime, value); if (comboBox1.SelectedItem.ToString() == "OverView") { chart.ChartAreas[0].AxisX.ScaleView.Position = 1; if (sum > 10) { double max = chart.ChartAreas[0].AxisX.Maximum; max = (sum / 10 + 1) * 10; chart.ChartAreas[0].AxisX.Interval = max / 10; } chart.ChartAreas[0].AxisX.ScaleView.Size = sum * 1.1; } if (comboBox1.SelectedItem.ToString() == "Follow") { chart.ChartAreas[0].AxisX.Interval = 1D; chart.ChartAreas[0].AxisX.ScaleView.Size = 10D; if (sum <= chart.ChartAreas[0].AxisX.ScaleView.Size) chart.ChartAreas[0].AxisX.ScaleView.Position = 1; else chart.ChartAreas[0].AxisX.ScaleView.Position = sum - chart.ChartAreas[0].AxisX.ScaleView.Size; } } } } }
三、效果
点击 start 按钮,效果如下。
源码下载:点击跳转
end
原文链接https://blog.csdn.net/qq_38693757/article/details/124348233
猜你喜欢
- 【C#】C# Winform 日志系统
- 目录一、效果1.刷新日志效果2.单独日志的分类3.保存日志的样式二、概述三、日志系统API1.字段Debug.IsScrollingDebug.VersionDebug.LogMaxLenDebug.LogTitleDebug.IsConsoleShowLog2.方法Debug.Log(string)Debug.Log(string, params object[])Debug.Logs(string)Debug.Logs(string, params object[])Debug.LogSav
- 【C#】C# Winform 热更新 基于ECSharp框架
- 目录一、简介二、 ECSharp热更新演示三、Winform 热更新实战结束一、简介ECSharp (原:EasySharpFrame)github 地址:https://github.com/suxf/ECSharp介绍:1.HTTP服务 2.Websocket服务 3.HyperSocket<自定义Socket服务> 4.TimeFlow<时间流> 5.Sqlserver数据库助手 6.Mysql数据助手 7.Redis数据库助手 8.Log功能 9.热更新
- 【C#】Winform NanUI 0.77版本 读取本地资源(扩展功能)
- 一、前言在NanUI官方的文档中,原本是有一个NanUI.FileResourceHandler的扩展包的,但现在官方已经无法下载了,现在只有0.88版本中有一个NanUI.LocalFileResource程序包,而0.77版本只剩下了一个读取嵌入式资源的程序包。关于NanUI:NanUI | .Net/.Net Core界面组件NanUI 0.7版正式发布 - 林选臣 - 博客园在扩展功能之前,请参考[资源处理器]-04 自定义资源处理器 - 知乎 ,我参考这个帖子进行扩展的,也不
- 【C#】C#md5加密
- using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace mdstr { internal
- 【C#】C# Winform Label 控件
- 目录一、概述二、基本用法1.控件内容显示2.控件的外观3.自定义控件的大小4.控件的内边距 5.设置文本的固定位置6.控件的事件结束一、概述Label 控件是 winform 开发中最常用的一个控件,一般用做显示文本,也有时用做打开链接等操作。二、基本用法新建一个 winform 项目,点击 form1 界面,找到工具箱,在工具箱里找到 Label ,拖入到界面即可。1.控件内容显示label 拖入界面中,如下,单击在属性界面就能看到具体的控件属性在这里有两个重要的属性:1.Name在
- 【C#】C# Winform自动更新
- 目录一、需求二、更新文件列表生成器三、软件启动器1.判断是否需要更新2.文件下载3.执行 下载,覆盖,删除任务4.执行结果四、搭建更新服务器1.启动服务器2.新建项目本体3.给启动软件加密4.修改版本号五、整体测试1.生成更新文件2.软件更新3.下载最新的版本4.打开软件本体5.总结结束当前项目已停止维护,推荐使用 FTP 版自动更新C# 自动更新(基于FTP)_c# 程序自动升级-CSDN博客一、需求在Unity里面,有XLua,ILRuntime 这样的热更新框架,有Unity经验的人都知道
- 【C#】C#调用win10系统自带软键盘的方法
- 上次做了个笔记是关于调用windows系统自带的触摸键盘的方法:C#调用Windows系统自带触摸键盘的方法_c# 虚拟键盘-CSDN博客除了调用触摸键盘,我们也可以通过调用win10的自带软键盘作为输入途径。方法很简单。1、添加using System.Diagnostics引用。2、创建进程Process Winvirkey = Process.Start("osk.exe");3、打开键盘:Winvirkey = Process.Start("osk.exe&
- 【C#】Winform NanUI 0.88版本 JS和C#相互调用
- 目录一、需求版本二、实例JS调用C#注册的只读属性JS调用C#注册的字段JS调用C#注册的同步方法JS调用C#注册的异步方法C#注册一个方法,JS调用并传递参数C#注册一个方法,JS调用并接收C#返回值C#注册一个方法,接收JS的数组参数C#注册一个方法,接收JS的一个函数,执行这个JS函数,并将C#的值传递过去三、结束一、需求在软件的界面和软件逻辑分离后,最重要的就是要处理参数的传递,和函数的调用,因此存在JS中和C#相互调用的需求。版本NanUI 版本:0.8.80.191二、实例using