在WinForms中更新雷达图

时间:2018-12-16 21:50:06

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

我有以下UI,其中Radar Chart中的值是通过某些TrackBar值的算术平均值计算得出的。 “ Player”对象获取这些值,计算平均值,然后将其返回到Radar Chart数据系列。

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

enter image description here

这是我的代码:

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]);

        }


    }

我正在尝试清除旧图表并重绘新图表,但这种方式无法正常工作。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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