我想询问是否可以使用MScharts创建两个简单的条形图:
Screen shot http://img16.imageshack.us/img16/4413/desktoptf.png
我想要上面图像的精确复制品,所以没有图表或网格,只需要两个简单的条形图。
另一件事是最大值由条形每端的小红色条纹表示,并应保持在那里直到超过最大值。
我的想法是我正在阅读应该动态应用于条形图的实时数据(4个值)。
那么有人知道如何解决这个问题吗?我目前正在使用MScharts插件(或者使用C#的绘图功能而不是MScharts可能会更好吗?)。
提前致谢。
编辑:
好的,这是我想出的:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool k = false;
Random random = new Random();
int max = 0;
protected override void OnPaint(PaintEventArgs paintEvnt)
{
int i = 30;
Graphics gfx = paintEvnt.Graphics;
Pen myPen = new Pen(Color.Black);
for (i = 40; i < 640; i = i + 100)
{
gfx.DrawLine(myPen, i, 25, i, 35);
}
for (i = 40; i < 640; i = i + 100)
{
gfx.DrawLine(myPen, i, 55, i, 65);
}
Color brushColor = Color.FromArgb(0, 0, 255);
SolidBrush myBrush = new SolidBrush(brushColor);
int randomnumber = random.Next(0, 601);
gfx.FillRectangle(myBrush, 33, 33, randomnumber, 25);
if (randomnumber + 33 > max)
{
max = randomnumber + 33;
gfx.DrawLine(new Pen(Color.Red, 3), max, 30, max, 60);
}
else
{
gfx.DrawLine(new Pen(Color.Red, 3), max, 30, max, 60);
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Invalidate();
}
}
}
这就是它的样子:http://img411.imageshack.us/img411/5646/graphmj.jpg 每次按下按钮,都会生成新的随机数据并覆盖旧图表。但是,仍然存在问题。 红色指示器应该仅在超过最大值时才会增加,这就是我尝试使用OnPaint方法中的if-query实现的,但它仍然会有时构成随机值并完全关闭,超过旧值虽然新的随机值甚至更低......但没有意义。
继续这个项目,任何人都想尝试并帮助我: http://up.k10x.net/ambglolrngulg/LevelMeter.zip
我真的很无能,因为代码对我来说是正确的。
答案 0 :(得分:1)
我不会使用mschart。我会编写一个控件来执行bar和max指示器,然后在另一个usercontrol上使用它来获取标签和内容。 最后我看到.net中没有形状控制,所以这可能会给你一些线索。 open source .net shape control
答案 1 :(得分:0)
在web.config中添加以下httphandler
<httpHandlers>
<add path="ChartImg.axd"
verb="GET,HEAD,POST"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler,
System.Web.DataVisualization,
Version=4.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"
validate="false"/>
</httpHandlers>
页面设计
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI.DataVisualization.Charting"
Assembly="System.Web.DataVisualization,
Version=4.0.0.0,
Culture=neutral,
PublicKeyToken=31bf3856ad364e35" %>
//Place the chart control on the page as follows.
<asp:Chart ID="Chart1" runat="server" Height="300px" Width="600px">
<Titles>
<asp:Title ShadowOffset="3" Name="Student Marks" />
</Titles>
<Legends>
<asp:Legend Alignment="Center" Docking="Bottom" IsTextAutoFit="False" Name="Legend"
LegendStyle="Row" />
</Legends>
<Series>
<asp:Series Name="Legend" />
</Series>
<ChartAreas>
<asp:ChartArea Name="studentChartArea" BorderWidth="0" />
</ChartAreas>
</asp:Chart>
在CodeBehind中编写以下代码以填充图表控件中的图表
protected void Page_Load(object sender, EventArgs e)
{
string[] xAxis = { "Student1", "Student2", "Student3", "Student4", "Student5", "Student6" };
double[] yAxis = { 39, 67, 96, 86, 47, 98 };
Chart1.Series["Legend"].Points.DataBindXY(xAxis, yAxis);
Chart1.Series["Legend"].Points[0].Color = Color.Black;
Chart1.Series["Legend"].Points[1].Color = Color.Bisque;
Chart1.Series["Legend"].Points[2].Color = Color.Blue;
Chart1.Series["Legend"].Points[3].Color = Color.BlueViolet;
Chart1.Series["Legend"].Points[4].Color = Color.Brown;
Chart1.Series["Legend"].Points[5].Color = Color.CornflowerBlue;
Chart1.Series["Legend"].ChartType = SeriesChartType.Column;
Chart1.ChartAreas["studentChartArea"].Area3DStyle.Enable3D = true;
}