【问题标题】:Update Radar Chart in WinForms在 WinForms 中更新雷达图
【发布时间】:2018-12-16 21:50:06
【问题描述】:

我有以下 UI,其中雷达图中的值是通过某些 TrackBar 值的算术平均值计算的。 'Player' 对象获取这些值,计算平均值并将其返回到雷达图数据系列。

我想要做的是,当我更改 TrackBar 中的值时,图表会实时更改其值。当我更改值时,它会重新计算平均值,然后更改图表形状。

这是我的代码:

public AddPlayerForm()
    {
        InitializeComponent();
        Load += this.AddPlayerForm_Load;//reloads the chart component every continuously
        LoadComboBoxes();
        MetroFramework.Controls.MetroTrackBar[] trackBars = new MetroFramework.Controls.MetroTrackBar[20];
    }

    //loads the Chart Content
    private void AddPlayerForm_Load(object sender, EventArgs e)
    {
        /*I tried to clear the current chart to recalculate and redraw the chart in every cycle
        but its not working this way*/
        chart1.Series.Clear();//clear the current chart
        new_player.SetPlayerStats(  //get values from TrackBars
         mtTrackBarAttack.Value,
         mtTrackBarBallControl.Value,
         .
         .//all trackBar.Values
         .
         mtInjuryResistenceTB.Value,
         1,
         "Messi");

        //recalculate the arithimetic mean and returns as a tag to the chart
        //Ex: {"Agility",60.4}
        Dictionary<string, float> tags = new_player.MeanStats();//Player method that calculates the mean and returns a dictionary <String, float>
        //creates a new series of data
        chart1.Series.Add("s1");
        chart1.Series["s1"].ChartType = SeriesChartType.Radar;


        foreach (string tagname in tags.Keys)
        {
            //for each set of data, plots the name and its value in the Chart
            chart1.Series["s1"].Points.AddXY(tagname, tags[tagname]);

        }


    }

我正在尝试清除旧图表并重新绘制新图表,但没有以这种方式工作。

【问题讨论】:

  • 为什么不在添加一组新点之前简单地清除 series.Points?另外:“不工作”不是一个有用的问题描述!!
  • chart1.Series.Clear(); 我清除了点,并在 AddPlayerForm_Load 方法的末尾添加了一组新点。 “不工作”是指图表没有更新。我保持不变,但没有显示任何错误。
  • chart1.Series.Clear(); 这实际上不仅删除了点,而且删除了所有系列及其所有设置。如果没有变化表明您的数据很可能没有真正改变(足够)。
  • 成功了! @TaW 如果您想回答,我会将其标记为最佳答案,因为它帮助我解决了问题。谢谢。
  • 我真的不能,因为我所做的只是向您指出一种效率较低的方法。真正的错误一定出在其他地方,可能是第二次以上没有正确设置数据。 - 就目前而言,我怀疑这篇文章将来会有用。

标签: c# visual-studio winforms charts radar-chart


【解决方案1】:

我从未使用过 Winforms-Charttool,但您是否已经尝试仅在 chart1-Object 上调用 refresh? https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datavisualization.charting.chart.refresh?view=netframework-4.7.2

【讨论】:

  • 您基本上永远不需要在图表上调用刷新来显示更改的值。
  • 使用这种方法,即使我增加了 Time Tick 间隔,图表也开始闪烁。所以我更喜欢使用 Series.Points.Clear()。但它也很有用,谢谢!
【解决方案2】:

我设法使用两种方法更新图表。首先感谢@TaW,我使用chart.Series.Points.Clear() 重绘数据。然后,为了自动更新它,我不得不使用时间滴答计数器每 100 毫秒更新一次图表,这要归功于@Tim in Add timer to a Windows Forms application.

图表成功更新后,我尝试使用@ChrizzleWhizzle 提到的chart.Refresh() 功能,但图表有时会开始闪烁,所以我更喜欢使用第一种解决方案,但它也有帮助。

谢谢大家的回答。如果我知道更好的方法,我会发布它。

【讨论】:

    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多