利用ECharts实现winform中的可视化图表

news2024/9/25 23:19:47

利用ECharts实现winform中的可视化图表

  • 背景
  • 思路
  • 第一步(先搞一个能展示图表的html文件)
  • 第二步(封装到winform中)
  • 第三步 写代码
  • 第四步 winfrom与html交互
    • 在html中增加方法 如下
    • 在winfrom中增加调用方法
    • 数据文件代码
  • 完整的运行效果

背景

如今web端的图表可以说是非常丰富且用起来方便,ECharts已经非常成熟了,如果在winform中使用那就太好了。

思路

使用winfrom程序封装一个web控件,然后进行展示就可以了,说干就干!

第一步(先搞一个能展示图表的html文件)

按照ECharts官网搞了一个折线图,效果如下
在这里插入图片描述

第二步(封装到winform中)

这里重点强调一下,不要使用webBrowser,因为这个东西的引擎导致一些渲染有问题

引入Web.View2

 <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.1722.45" />

在winfrom的工具箱中就能看到控件了

在这里插入图片描述

第三步 写代码

在窗体加载后,将webview的url给到指定的html文件就可以了
我这个放在根目录了

  private void Form1_Load(object? sender, EventArgs e)
        {
            webView21.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + "line_chart.html");

        }

到此一切都挺好,能正常显示了。但是不能交互。

第四步 winfrom与html交互

在html中增加方法 如下

 function LoadData(data) {
            myChart.setOption({
                series:  data
            });
        }

html的完整代码如下

<!--
    此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=dynamic-data2
-->
<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%">
<head>
    <meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
    <div id="container" style="height: 100%"></div>


    <script type="text/javascript" src="echarts.min.js"></script>
   

    <script type="text/javascript">
        var dom = document.getElementById('container');
        var myChart = echarts.init(dom, null, {
            renderer: 'canvas',
            useDirtyRect: false
        });
        var app = {};

        var option;

       
        option = {
            title: {
                text: '这是一个测试数据'
            },
            tooltip: {
                trigger: 'axis',
                
                axisPointer: {
                    animation: true
                }
            },
            xAxis: {
                type: 'category',
                splitLine: {
                    show: false
                }
            },
            yAxis: {
                type: 'value',
                boundaryGap: [0, '100%'],
                splitLine: {
                    show: false
                }
            },
            dataZoom: [{
                type: 'slider',//图表下方的伸缩条
                show: true, //是否显示
                realtime: true, //拖动时,是否实时更新系列的视图
                start: 0, //伸缩条开始位置(1-100),可以随时更改
                end: 100, //伸缩条结束位置(1-100),可以随时更改
            }],
            toolbox: {
                show: true,
                feature: {
                    dataZoom: {
                        yAxisIndex: "none"
                    }
                }
            },
            series: [
            ]
        };
        

        if (option && typeof option === 'object') {
            myChart.setOption(option);
        }

        window.addEventListener('resize', myChart.resize);

       
        function LoadData(data) {
            myChart.setOption({
                series:  data
            });
        }

    </script>
</body>
</html>

在winfrom中增加调用方法

  private void toolStripLabel1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "*.data|*.data";
            openFileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
            openFileDialog.ShowDialog();
            if (string.IsNullOrEmpty(openFileDialog.FileName)) return;
            var s = File.ReadAllText(openFileDialog.FileName);
            var js = $"let dd = {s};" +
                $"LoadData(dd);";
            webView21.CoreWebView2.ExecuteScriptAsync(js);
        }

数据文件代码

[
  {
    "name": "测试数1",
    "type": "line",
    "showSymbol": false,
    "data": [
      [ "a", 1 ],
      [ "b", 2 ],
      [ "c", 3 ],
      [ "d", 4 ],
      [ "e", 5 ],
      [ "f", 6 ],
      [ "h", 7 ],
      [ "i", 8 ],
      [ "j", 9 ],
      [ "k", 10 ]
    ]
  },
  {
    "name": "测试数2",
    "type": "line",
    "showSymbol": false,
    "data": [
      [ "a", 10 ],
      [ "b", 20 ],
      [ "c", 30 ],
      [ "d", 40 ],
      [ "e", 50 ],
      [ "f", 60 ],
      [ "h", 70 ],
      [ "i", 80 ],
      [ "j", 90 ],
      [ "k", 10 ]
    ]
  }

]

完整的运行效果

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python教程——Python本地环境安装

文章目录 简介安装Python下载安装验证安装结果 手动添加环境变量安装问题 简介 python官网&#xff1a;https://www.python.org/ Python Windows下载地址&#xff1a;https://www.python.org/downloads/windows/ Python 官方文档&#xff1a;https://www.python.org/doc/ Pytho…

man,cp,mv,alias,more,less,head,tail指令与文件片段读取和管道的初步介绍

tips 文件夹就是目录定位某个文件的位置&#xff0c;本质上就是在Linux的多叉树目录结构下去定位它的位置文件名主干&#xff08;不考虑前缀路径&#xff09;以. 开头的文件就被称为隐藏文件任何一个目录下面都有一个.隐藏文件与…隐藏文件无论window还是Linux&#xff0c;常识…

C语言文件操作【基础知识 + 顺序读写 + 文件版通讯录】

全文目录 &#x1f600; 前言&#x1f914; 什么是文件&#x1f636; 程序文件&#x1f636; 数据文件&#x1f636; 文件名 &#x1f928; 文件指针&#x1f92b; 文件的打开和关闭&#x1f611; fopen 打开文件&#x1f4d9; **mod的规律&#xff1a;** &#x1f611; fclose…

registry私有仓库搭建

目录 一、搭建本地仓库 1、首先下载registry镜像 2、在daemon.json文件中添加私有镜像仓库地址 3、运行registry容器 4、为镜像打标签 5、上传到私有仓库 6、列出私有仓库的所有镜像 7、列出私有仓库的centos 镜像有哪些tag 8、先删除原有的centos的镜像&#xff0c;再…

(九)Geoprocessing地理处理框架——ArcToolbox内容简介

&#xff08;九&#xff09;Geoprocessing地理处理框架——ArcToolbox内容简介 目录 &#xff08;九&#xff09;Geoprocessing地理处理框架——ArcToolbox内容简介 1.工具集简介1.1 3D Analyst工具箱&#xff1a;1.2分析工具箱:1.3制图工具箱:1.4转换工具箱:1.5Data Interoper…

有必要给孩子买台灯吗?分享四款高品质的护眼台灯

有必要使用护眼台灯&#xff0c;尤其是有近视现象的孩子们。 现在很多孩子小学就开始近视了&#xff0c;保护视力刻不容缓呀! 很多人不知道&#xff0c;其实劣质光线是最大的眼睛杀手 给孩子随便买便宜的台灯&#xff0c;看着一样能用&#xff0c;其实时间久了 对孩子眼睛的…

java版企业电子招投标系统源代码之了解电子招标投标全流程

随着各级政府部门的大力推进&#xff0c;以及国内互联网的建设&#xff0c;电子招投标已经逐渐成为国内主流的招标投标方式&#xff0c;但是依然有很多人对电子招投标的流程不够了解&#xff0c;在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同&#xff0…

每天一道算法练习题--Day20 第一章 --算法专题 --- ----------滑动窗口(思路 + 模板)

笔者最早接触滑动窗口是滑动窗口协议&#xff0c;滑动窗口协议&#xff08;Sliding Window Protocol&#xff09;&#xff0c;属于 TCP 协议的一种应用&#xff0c;用于网络数据传输时的流量控制&#xff0c;以避免拥塞的发生。 发送方和接收方分别有一个窗口大小 w1 和 w2。窗…

机器学习小结之KNN算法

文章目录 前言一、概念1.1 机器学习基本概念1.2 k 值1.3 距离度量1.4 加权方式 二、实现2.1 手写实现2.2 调库 Scikit-learn2.3 测试自己的数据 三、总结3.1 分析3.2 KNN 优缺点 参考 前言 ​ KNN (K-Nearest Neighbor)算法是一种最简单&#xff0c;也是一个很实用的机器学习的…

VLAD Diffusion,一个更好用且易于安装的Stable Diffusion Web UI

VLAD Diffusion 是我们前面介绍过的 AUTOMATIC1111/stable-diffusion-webui的一个定制的更新&#xff0c;它主要是为了更频繁发布的更新和错误修复。它包含 新的安装程序&#xff0c;并且提供了高级CUDA调优不在依赖Accelerate&#xff0c;因为Accelerate是分布式的&#xff0…

setTimeout不准时,CSS精准实现计时器功能

实际开发过程中&#xff0c;我们会经常遇到&#xff0c;首次进入页面进行相应提示&#xff0c;然后指定时间后自动消失或者前端时钟展示等需求。 按照传统方案&#xff0c;我们可以使用 setTimeout 实现。但其存在&#xff1a;实际延时比设定值更久的情况。 setTimeout 不准时…

单个案例奖金2000元!AidLux AI 应用案例悬赏征集活动第二期选题上线啦

AidLux AI 应用案例悬赏征集活动第一期开发者作品新鲜"出炉"啦&#xff01; 得益于AidLux在AI应用部署端的极大优势&#xff0c;开发者们在短时间内轻松落地了大批AI应用。 其中&#xff0c;不乏后厨老鼠识别告警系统、粮食作物特定病虫害告警系统、基于视觉的仰卧起…

专注主业、管控风险,中国春来的“非激进式扩张”

近日&#xff0c;中国春来发布截至2023年2月28日止六个月的中期业绩公告&#xff0c;期内收入同比增长14.2%至7.49亿元&#xff0c;利润同比上涨32%至3.31亿元&#xff0c;交出了亮眼的成绩单。 探究中国春来业绩上涨的原因&#xff0c;关键在于扩大招生。而招生规模很大程度上…

ChatGPT终于被我问到胡说八道的程度了!

问&#xff1a;Python是强类型语言&#xff0c;还是弱类型语言 chatgpt&#xff1a;Python是强类型语言。Python很少会隐式地转换变量的类型&#xff0c;所以Python是强类型的语言 问&#xff1a;什么是强类型语言 chatgpt&#xff1a;强类型语言是指在编程语言中&#xff0…

自动控制原理笔记-频率响应法-系统的开环频率特性图的绘制

目录 一、系统的开环对数频率特性图&#xff08;Bode图&#xff09; 绘制方法I&#xff1a;&#xff08;各环节的Bode图求和&#xff09; 绘制方法II&#xff1a;&#xff08;不求和&#xff0c;直接绘图&#xff09; 二、系统的开环幅相特性图&#xff08;Nyquist图、极坐标…

Linux网络编程——网络基础[1]

目录 1.网络发展 2.初识协议 2.1协议分层 2.2OSI七层模型 2.3TCP/IP四层(五层)模型 3.网络传输的基本流程 3.1协议报头 3.2局域网通信原理 3.3广域网通信原理 3.4数据包的封装和分用 4.网络中的地址管理 1.网络发展 计算机是帮助人解决计算问题的&#xff0c;而人…

实在智能出席第六届数字中国建设峰会,入围2022年信息技术应用创新优秀解决方案榜单

最美榕城四月天&#xff0c;山海之间尽显数字澎湃。这一周来&#xff0c;实在智能来到了“有福之州”&#xff0c;为数字中国建设增添实在色彩。 4月25日&#xff0c;实在华夏行抵达福州站&#xff0c;与众多生态合作伙伴携手共话数字发展新未来&#xff1b; 4月26日&#xff…

在DARTS空间中进行神经架构搜索(NAS)

前言 神经架构搜索(NAS)&#xff1a;自动化设计高性能深度神经网络架构的技术神经架构搜索任务主要有三个关键组成部分&#xff0c;即&#xff1a; 模型搜索空间&#xff0c;定义了一个要探索的模型的集合一个合适的策略作为探索这个模型空间的方法一个模型评估器&#xff0c;…

全景丨0基础学习VR全景制作,平台篇第15章:热点功能-音图文

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01; 功能说明 应用场景 热点&#xff0c;指在全景作品中添加各种类型图标的按钮&#xff0c;引导用户通过按钮产生更多的交互&#xff0c;增加用户的多元化体验。 音图文热点&#xff0c;即音频、图片、文字…

如何将redis部署在linux操作系统中:(十分详细的步骤)

一&#xff1a;通过虚拟机安装一个linux环境 注意&#xff1a;安装一个带有可视化界面的环境 将指标选中install centos7 按enter键 选择自己需要的语言 选中gui&#xff1a;桌面&#xff08;可视化界面) 只需要配置软件设置即可&#xff0c;其他的则进行默认配置进行 root用…