zedgraph在winform中画动态柱状图(棒状图,直方图)
我在winform中用zedgraph控件画柱状图,定时刷新,为什么不数据不能更新呢private void GraphBar(string [] lables,double [] i_values,double []v_values )
{ GraphPane myPane = Zg_control.GraphPane;
myPane.Title.Text = "";
myPane.XAxis.Title.Text = "";
myPane.YAxis.Title.Text = "";
myPane.CurveList.Clear();
myPane.GraphObjList.Clear();
myPane.Title.Text= "变压柜电流/电压柱状图";
myPane.XAxis.Title.Text = "电流/电压值";
myPane.YAxis.Title.Text = "电压电流值";
BarItem myBar = myPane.AddBar("curve_I" ,null ,i_values ,Color .Red );
myBar = myPane.AddBar("curve_V",null ,v_values,Color .Green );
Zg_control.AxisChange();
//Zg_control.Invalidate();
Zg_control.Refresh();
}
传入正确的参数后我就定期调用这个方法,可是直方图不更新啊
void KepGroup_AsyncReadComplete(int TransactonID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Quantities, ref Array TimeStamps, ref Array Errors)
{
listView1.Items.Clear();
string GK;
string V;
string I;
int p = 0;
zg_lables = new string[NumItems / 3];
I_values = new double[NumItems / 3];
V_values = new double[NumItems / 3];
int result;
int resultI;
int resultV;
Array.Sort(ClientHandles);//搜索前一定要进行排序
ListViewItem viewitem;
try
{
if (TransactonID == READASYNC_ID)
{
for (int i = 1; i <= NumItems; i = i + 3)
{
result = Array.BinarySearch(ClientHandles, i);
if (result > 0)
{
GK = ClientHandles.GetValue(result).ToString();//获取开关句柄
viewitem = new ListViewItem(GK);//第i行第1列
zg_lables[p] = GK;
resultI = Array.BinarySearch(ClientHandles, i + 2);//获取电流项句柄
if (resultI > 0)
{
I = ItemValues.GetValue(resultI).ToString();
viewitem.SubItems.Add(I);//第i行第2列
I_values[p] = Convert.ToDouble(I);
}
else
{
break;
}
resultV = Array.BinarySearch(ClientHandles, i + 1);//获取电压项句柄
if (resultV > 0)
{
V = ItemValues.GetValue(resultV).ToString();
viewitem.SubItems.Add(V);//第i行第2列
V_values[p] = Convert.ToDouble(V);
}
else
{
break;
}
}
else
{
break;
}
listView1.Items.Add(viewitem);
p++;
}
GraphBar(zg_lables, I_values, V_values);
}
}
catch (Exception ee)
{
MessageBox.Show("异步读完成处理失败:"+ee .Message ,"提示信息",MessageBoxButtons .OK ,MessageBoxIcon.Warning);
}
}
快帮我看一下啊 --------------------编程问答--------------------
//Zg_control.Invalidate();--------------------编程问答-------------------- invalidate()这个方法我试了,也不行啊,所以我才用的Zg_control.Refresh()啊,而且下面这段代码,我做了测试,是可以动态刷新柱状图的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int i = 0;
private void Form1_Load(object sender, EventArgs e)
{
timer1.Interval = 1000;
timer1.Enabled = true;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
string[] labes = { "1", "2", "3", "4" };
double[] I = { i + 1, i - 1, i + 5, i - 4 };
double[] V = { i + 5, i - 4, i + 3, i - 7 };
label1.Text = i.ToString();
GraphBar(labes, I, V);
i++;
}
private void GraphBar(string[] lables, double[] i_values, double[] v_values)
{
GraphPane myPane = Zg_control.GraphPane;
myPane.CurveList.Clear();
myPane.GraphObjList.Clear();
myPane.Title.Text = "";
myPane.XAxis.Title.Text = "";
myPane.YAxis.Title.Text = "";
myPane.Title.Text = "变压柜电流/电压柱状图";
myPane.XAxis.Title.Text = "电流/电压值";
myPane.YAxis.Title.Text = "电压电流值";
BarItem myBar = myPane.AddBar("curve_I", null,i_values, Color.Red);
myBar = myPane.AddBar("curve_V", null, v_values, Color.Green);
myPane.XAxis.Type = AxisType.Text;
myPane.XAxis.Scale.TextLabels = lables;
Zg_control.AxisChange();
Zg_control.Refresh();
}
} --------------------编程问答-------------------- 同志们。。帮帮忙啊。。还在受此问题困扰呢,三天了 --------------------编程问答-------------------- Zg_control.AxisChange();
Zg_control.Refresh();
我就是这样啊。可以刷新的,但是我发现每次刷新后柱子上的数据不显示,要滚动一下滚动条才行。 --------------------编程问答-------------------- 做图形控件可以用第三方控件,我们的平台做这种就比较方便。
查看地址 --------------------编程问答-------------------- 重新绘制之前要清除
mypie.GraphPane.GraphObjList.Clear();
mypie.GraphPane.CurveList.Clear();
//mypie.XAxis.Scale.TextLabels = null;
mypie.Refresh();
mypie.AxisChange();
补充:.NET技术 , 组件/控件开发