Winform程序中嵌入Echarts

Echarts

Winform程序中嵌入Echarts

原文链接:https://jingyan.baidu.com/article/eb9f7b6d5a0395869364e829.html

公司项目需要用Winform程序来做一个店铺经营看板,因此希望能在winform程序内生成相应的图表。
于是找到了这篇文章,在这里备忘一下。

首先设置WebBrowser控件的几个属性:
chartBrowser.AllowWebBrowserDrop = false;//防止 WebBrowser 控件打开拖放到其上的文件。
chartBrowser.IsWebBrowserContextMenuEnabled = false;//防止 WebBrowser 控件在用户右击它时显示其快捷菜单.
chartBrowser.WebBrowserShortcutsEnabled = false;//以防止 WebBrowser 控件响应快捷键。
chartBrowser.ScriptErrorsSuppressed = true;//以防止 WebBrowser 控件显示脚本代码问题的错误信息。
chartBrowser.ObjectForScripting = this; (这个属性比较重要,可以通过这个属性,把WINFROM中的变量,传递到JS中,供内嵌的网页使用;但设置到的类型必须是COM可见的,所以要设置 [System.Runtime.InteropServices.ComVisibleAttribute(true)],因为我的值设置为this,所以这个特性要加载窗体类上)

string webPageURL = AppDomain.CurrentDomain.BaseDirectory + @“Html\Chart.html”;
chartBrowser.Navigate(webPageURL);
this.ChartPatams = Newtonsoft.Json.JsonConvert.SerializeObject(chartValues);
//此处的chartValues可以是任意的对象,我只是把它序列话成一个JSON字符串,并保存在窗体的自定义属性里。
这些属性的设定可以写在任何事件里,方便测试的话直接写到窗体构造函数里。
到此WINFROM程序的设置完成。
接下来编辑嵌入的HTML页面。
我们只为了生成图表,所以要引入ECharts.js(记的发布的时候要把HTML文件和JS文件同时发布)

图表

var myChart = echarts.init(document.getElementById(‘main’));
var data = eval(’(’ +window.external.ChartPatams+ ‘)’); //把WINFROM中保存的变量转换成JSON对象(此处我的对象就是一个数值的数组类似[1,2,3,4,5])
var xAxisData = new Array();
var yAxisData = new Array();
for (var i = 1; i <= data.length; i++) {
xAxisData[i - 1] = i;
yAxisData[i - 1] = data[i - 1];
}
// 指定图表的配置项和数据
var option = {
title: {
text: ‘趋势图’
},
xAxis: {
data: xAxisData
},
tooltip: {},
yAxis: {},
series: [{
type: ‘line’,
data: yAxisData
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
}

到此结束。

您可以使用`System.Diagnostics.Process`类来启动控制台并将其嵌入WinForm窗口。 首先,您需要在WinForm添加一个`Panel`控件,然后将其命名为`consolePanel`。然后使用以下代码启动控制台并将其嵌入到该面板: ```csharp // 启动控制台进程 Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardInput = true; process.Start(); // 将控制台窗口嵌入WinForm IntPtr handle = process.MainWindowHandle; SetParent(handle, consolePanel.Handle); // 设置控制台窗口位置和大小 SetWindowLong(handle, GWL_STYLE, WS_VISIBLE | WS_CHILD); MoveWindow(handle, 0, 0, consolePanel.Width, consolePanel.Height, true); ``` 请注意,您需要导入以下WinAPI函数: ```csharp [DllImport("user32.dll")] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll", SetLastError = true)] static extern int SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong); [DllImport("user32.dll", SetLastError = true)] static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); const int GWL_STYLE = -16; const uint WS_VISIBLE = 0x10000000; const uint WS_CHILD = 0x40000000; ``` 当您运行应用程序时,将会在WinForm窗口嵌入一个控制台。您可以使用`process.StandardInput`属性向控制台发送命令,并使用`process.StandardOutput`属性获取控制台输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值