C# Winform 里做曲线图

legendlovehao 2011-06-20 10:06:40
RT:
一个功能 类似于网上股市走势 是要能把图画出来在页面上展示出来 点击上面线上每一个点 都会有这个数据说明 无论用控件还是代码实现都行 求思路和资料 ! (PS:Winform新手上路、不知道描述详细不)
...全文
456 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
legendlovehao 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 chuzhaowei 的回复:]

做成web方式的,然后用WebBrower嵌到你的winform中

web方式的图标效果好,容易实现,www.highcharts.com 这里就有一个纯js的图表控件。
[/Quote]
非常感谢这位朋友给的这个思路建议 我需要的就是这个效果 这个做Web的时候收藏了
开发者孙小聪 2011-06-21
  • 打赏
  • 举报
回复
就是画图 嘛 在鼠标 移动这个事件里边。。。。。。。。
xpcxpy 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 isjoe 的回复:]
图表控件是优选,不是mschart可以吗
[/Quote]百度一下mschart
legendlovehao 2011-06-20
  • 打赏
  • 举报
回复
说的不一定很清晰 诸位见谅 组件是在不熟悉 不知道怎么去控制 所以我就找了些直接用代码写的 我意思在页面上能控制那些点 不是指 我需要操作它 只要我点击线上的一个点 显示这个点的信息(比方:X,Y坐标值即可) 说起来很简单 请大家不吝赐教 ~
legendlovehao 2011-06-20
  • 打赏
  • 举报
回复

public ArrayList arrData = new ArrayList();
public ArrayList arrMonth = new ArrayList();
private void QuXianTu_Load(object sender, EventArgs e)
{
arrMonth.Add(1);
arrMonth.Add(2);
arrMonth.Add(3);
arrMonth.Add(4);
arrMonth.Add(5);
arrMonth.Add(6);
arrData.Add(800);
arrData.Add(1000);
arrData.Add(850);
arrData.Add(900);
arrData.Add(750);
arrData.Add(1500);
}

private void button1_Click(object sender, EventArgs e)
{
int iCanvasWidth = 1024;
int iCanvasHeight = 768;
Bitmap bitmap = new Bitmap(iCanvasWidth, iCanvasHeight, PixelFormat.Format24bppRgb);
Graphics graph = Graphics.FromImage(bitmap);
graph.Clear(Color.White);

Font font = new Font("MS UI Gothic", 12);
SolidBrush brush = new SolidBrush(Color.Black);
Pen pen = new Pen(Color.Black);
pen.EndCap = LineCap.ArrowAnchor;
pen.DashStyle = DashStyle.Solid;

#region 座標軸描画
graph.DrawLine(pen, 200, 600, 650, 600);
graph.DrawLine(pen, 200, 600, 200, 150);
//X軸
graph.DrawLine(Pens.Black, 200 + 90 * 1, 600, 200 + 90 * 1, 600 - 5);
graph.DrawLine(Pens.Black, 200 + 90 * 2, 600, 200 + 90 * 2, 600 - 5);
graph.DrawLine(Pens.Black, 200 + 90 * 3, 600, 200 + 90 * 3, 600 - 5);
graph.DrawLine(Pens.Black, 200 + 90 * 4, 600, 200 + 90 * 4, 600 - 5);
graph.DrawLine(Pens.Black, 245 + 90 * 0, 600, 245 + 90 * 0, 600 - 2);
graph.DrawLine(Pens.Black, 245 + 90 * 1, 600, 245 + 90 * 1, 600 - 2);
graph.DrawLine(Pens.Black, 245 + 90 * 2, 600, 245 + 90 * 2, 600 - 2);
graph.DrawLine(Pens.Black, 245 + 90 * 3, 600, 245 + 90 * 3, 600 - 2);
graph.DrawLine(Pens.Black, 245 + 90 * 4, 600, 245 + 90 * 4, 600 - 2);
//Y軸
graph.DrawLine(Pens.Black, 200, 150 + 90 * 1, 200 + 5, 150 + 90 * 1);
graph.DrawLine(Pens.Black, 200, 150 + 90 * 2, 200 + 5, 150 + 90 * 2);
graph.DrawLine(Pens.Black, 200, 150 + 90 * 3, 200 + 5, 150 + 90 * 3);
graph.DrawLine(Pens.Black, 200, 150 + 90 * 4, 200 + 5, 150 + 90 * 4);
graph.DrawLine(Pens.Black, 200, 195 + 90 * 0, 200 + 2, 195 + 90 * 0);
graph.DrawLine(Pens.Black, 200, 195 + 90 * 1, 200 + 2, 195 + 90 * 1);
graph.DrawLine(Pens.Black, 200, 195 + 90 * 2, 200 + 2, 195 + 90 * 2);
graph.DrawLine(Pens.Black, 200, 195 + 90 * 3, 200 + 2, 195 + 90 * 3);
graph.DrawLine(Pens.Black, 200, 195 + 90 * 4, 200 + 2, 195 + 90 * 4);
#endregion

#region 目盛文字,見出し部,マーク文字 描画
double dblY1 = 600;
double dblX1 = 200;
for (int i = 0; i < arrData.Count; i++)
{
double dblData = Convert.ToDouble(arrData[i]);
double dblY2 = 600 - dblData / 2000 * 450;
double dblX2 = Convert.ToDouble(arrMonth[i]) / 10 * 450 + 200;
graph.DrawLine(Pens.Black, float.Parse(dblX1.ToString()), float.Parse(dblY1.ToString()), float.Parse(dblX2.ToString()), float.Parse(dblY2.ToString()));
dblY1 = dblY2;
dblX1 = dblX2;
}
for (int i = 0; i < 10; i++)
{
int intX = 450 / 10 * i + 200;
int intY = 600 - 450 / 10 * i;
Point ptx = new Point(intX, 620);
Point pty = new Point(150, intY);
graph.DrawString(Convert.ToString(i * 200), font, brush, pty);
graph.DrawString(i.ToString() + "月", font, brush, ptx);
}
#endregion

string strFilePath = @"E:\jackey_gif.gif";
bitmap.Save(strFilePath, ImageFormat.Gif);

font.Dispose();
brush.Dispose();
graph.Dispose();
bitmap.Dispose();

这是一个我在网上找的 一个简易的 可是他最后是打印出来了 我需要把他显示到页面上去 没弄过 对这个类也熟悉 求高手指教下 虚心求教 还有非常感谢LS那么多朋友给提供的组件资料 用了 还不是很熟悉 还需要摸索 非常感谢
demaxiya 2011-06-20
  • 打赏
  • 举报
回复
TeeChart不知道对LZ有没有帮助
http://www.componentcn.com/html/jbtbkj_249_3826.html
轮销桂魄@ 2011-06-20
  • 打赏
  • 举报
回复
mschart(微软) 或者 ZedGraph(开源控件) 或者GDI+绘图
itwarcraft 2011-06-20
  • 打赏
  • 举报
回复
学习了,项目也很可能需要画日线图连续图等。
isjoe 2011-06-20
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_62a4d04a0100g7dy.html
isjoe 2011-06-20
  • 打赏
  • 举报
回复
图表控件是优选,不是mschart可以吗
yang1216 2011-06-20
  • 打赏
  • 举报
回复
ZedGraph +1.
jq_whh 2011-06-20
  • 打赏
  • 举报
回复
用MFC做过,很烦
bdmh 2011-06-20
  • 打赏
  • 举报
回复
在组件的Graphic上画出来,你得根据数据,然后根据画图范围,确定每个数据点的坐标位置,然后就是DrawLine
chuzhaowei 2011-06-20
  • 打赏
  • 举报
回复
做成web方式的,然后用WebBrower嵌到你的winform中

web方式的图标效果好,容易实现,www.highcharts.com 这里就有一个纯js的图表控件。
legendlovehao 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 q198708wyp 的回复:]

我给你个例子QQ521070107
[/Quote]
您QQ有姓名验证 方便加一下我的Q吗? 1259340356 谢谢
小道消息 2011-06-20
  • 打赏
  • 举报
回复
用控件比较好,mschart teechart都可以
麦歌巴巴 2011-06-20
  • 打赏
  • 举报
回复
楼主 结贴 发分!
q198708wyp 2011-06-20
  • 打赏
  • 举报
回复
我给你个例子QQ521070107

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧