我试图查找有关如何在windows窗体报表中使用径向仪表盘的信息。我真的在这上面找不到任何东西。不确定是否没有太多关于这方面的信息。有没有人能帮我弄到一些信息?如何在报表查看器中使用文本框中的值在径向仪表盘上显示该值,甚至使用跟踪条来了解如何使用它。
即使在此基础上构建一个小示例也是非常好的:-)
发布于 2019-02-11 17:40:25
即使没有任何外部的东西,你也有几个选择。
下面是一个这样的例子:

代码很简单:
DataPoints来设置图表;然后我们编写一个函数来更新值。这些要点是为了
表示仪表的值。
为了进行测试,我使用以下变量:
double valMin = 0; // user data minimum
double valMax = 100; // ~ maximum
float angle = 60; // open pie angle at the bottom
string valFmt = "{0}°"; // a format string我的当前值是从跟踪条中提取的。
设置代码:
void setupChartGauge(double val, double vMin, double vMax, float a)
{
valMin = vMin;
valMax = vMax;
angle = a;
Series s = gaugeChart.Series[0];
s.ChartType = SeriesChartType.Doughnut;
s.SetCustomProperty("PieStartAngle", (90 - angle/2) + "");
s.SetCustomProperty("DoughnutRadius", "10");
s.Points.Clear();
s.Points.AddY(angle);
s.Points.AddY(0);
s.Points.AddY(0);
setChartGauge(0);
s.Points[0].Color = Color.Transparent;
s.Points[1].Color = Color.Chartreuse;
s.Points[2].Color = Color.Tomato;
}并设置一个值:
void setChartGauge(double val)
{
Series s = gaugeChart.Series[0];
double range = valMax - valMin;
double aRange = 360 - angle;
double f = aRange / range;
double v1 = val * f;
double v2 = (range - val) * f;
s.Points[1].YValues[0] = v1;
s.Points[2].YValues[0] = v2;
gaugeChart.Titles[0].Text = String.Format(valFmt, val);
gaugeChart.Refresh();
}我添加了最小的样式:
Chart有一个Title停靠的居中底部,我还更新了Paint事件中画了一个内圆,如下所示:<代码>H235<代码>F236e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
Rectangle r = chart1.ClientRectangle;
r.Inflate(-10, -10);
using (SolidBrush brush = new SolidBrush(Color.FromArgb(55, Color.Beige)))
e.Graphics.FillEllipse(brush, r);请注意,Pie和Doughnut图表只能有one系列。要显示第二个,你需要一个重叠的第二个chartarea,其中包含完全相同的Position。
有无数种方法可以绘制内容,无论是从头开始还是更新MsChart控件。脑海中浮现出各种渐变笔刷。添加刻度和指针将涉及旋转代码,它基本上由3行代码组成。
更新:
这是一个绘制仪表指针的示例。
代码应该从Paint事件中调用,并且应该传递一个有效的Graphics对象(read:e.Graphics)、一个数据值的float、一个放置仪表的Rectangle、一个要使用的矩形大小百分比的Color和一个float。
private void drawNeedle(Graphics g, float val, Rectangle r, Color c, float length)
{
Point pc = new Point(r.X + r.Width / 2, r.Y + r.Height / 2);
Point p2 = new Point((int)( pc.X + r.Width / 2 * length / 100f), pc.Y);
using (Pen pen = new Pen(c, 3f)
{ StartCap = LineCap.RoundAnchor, EndCap = LineCap.ArrowAnchor })
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.TranslateTransform(pc.X, pc.Y);
g.RotateTransform(val - (270 - angle / 2));
g.TranslateTransform(-pc.X, -pc.Y);
g.DrawLine(pen, pc, p2);
g.ResetTransform();
}
}您可以在任何支持所有者描述的控件中使用它,包括图表:
drawNeedle(e.Graphics, (float)gaugeChart.Series[0].Points[1].YValues[0], r, Color.White, 70f);发布于 2019-02-07 20:50:14
下面是一个包含TrackBar的简单示例:
private Syncfusion.Windows.Forms.Gauge.RadialGauge radialGauge1;
private System.Windows.Forms.TrackBar trackBar1;
private Syncfusion.Windows.Forms.Gauge.Needle needle1;
private void InitializeComponent()
{
this.needle1 = new Syncfusion.Windows.Forms.Gauge.Needle();
this.needle1.Value = 0F;
this.trackBar1 = new System.Windows.Forms.TrackBar();
this.radialGauge1 = new Syncfusion.Windows.Forms.Gauge.RadialGauge();
this.trackBar1.Value = (int) needle1.Value;
this.radialGauge1.EnableCustomNeedles = true;
this.radialGauge1.NeedleCollection.Add(needle1);
this.radialGauge1.Size = new System.Drawing.Size(230, 230);
this.radialGauge1.TabIndex = 0;
this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll);
}以及在gauge和trackBar之间同步的滚动事件:
private void trackBar1_Scroll(object sender, EventArgs e)
{
needle1.Value = trackBar1.Value;
}https://stackoverflow.com/questions/54570018
复制相似问题