答案 0 :(得分:3)
这在winforms中使用GDI非常容易实现。创建一个新的UserControl,将OnPaint功能覆盖为:
----------------编辑------------------ 创建一个新的UserControl:右键单击项目 - >添加 - >用户控制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
private void UserControl1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawEllipse(Pens.Blue, 0, 0, this.Width, this.Height);
e.Graphics.DrawString("90", this.Font, Brushes.Black, new PointF(0, 0));
e.Graphics.DrawLine(Pens.Red, 0,0, this.Width, this.Height );
}
}
}
答案 1 :(得分:3)
使用MSChart
控件并不难。
您可以使用其Polar ChartType
并设置两个Axes
的各种属性,以达到您想要的效果:
这是一个例子;在表单中添加Chart chart1
并将其设置为:
Series s = chart1.Series[0]; // a reference to the default series
ChartArea ca = chart1.ChartAreas[0]; // a reference to the default chart area..
Axis ax = ca.AxisX; // and the ewo..
Axis ay = ca.AxisY; // ..axes
s.ChartType = SeriesChartType.Polar; // set the charttype of the series
s.MarkerStyle = MarkerStyle.Circle; // display data as..
s.SetCustomProperty("PolarDrawingStyle", "Marker"); //.. points, not lines
让辐条以15°的步幅从0°到360° 旋转90°设置这些轴值:
ax.Minimum = 0;
ax.Maximum = 360;
ax.Interval = 15;
ax.Crossing = 90;
控制响铃比较棘手,因为它最终必须考虑您的数据值! 假设y值从0到100,我们可以使用这些设置得到10个响铃:
ay.Minimum = 0;
ay.Maximum = 100;
ay.Interval = (ay.Maximum - ay.Minimum) / 10;
如果您的数据值有不同的范围,您应该调整这些值!
因此(Maximum - Minimum) / Interval
的辐条数量为X-Axis
。并且对于Y-Axis
,环的数量是相同的。要控制两者,最好设置所有,而不是依赖默认的自动设置!
如果你想要一个空的中心,你应该
作为替代方案,您可以向中心添加一个虚拟Datapoint并为其设置样式:
int cc = s.Points.AddXY(0, ay.Minimum);
DataPoint dpc = s.Points[cc];
dpc.MarkerColor = Color.White;
dpc.MarkerSize = centerwidth; // tricky!
要找到centerwidth
的正确尺寸,您必须进行测试,或者,如果您希望缩放工作,请在xxxPaint
事件中进行测量;这超出了这个答案的范围..