Обновление диаграммы радара в WinForms - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть следующий пользовательский интерфейс, где значения в радиолокационной карте вычисляются по среднему арифметическому некоторых значений TrackBar.Объект Player принимает эти значения, вычисляет среднее значение и возвращает его обратно в ряд данных радарной диаграммы.

Что я хочу сделать, так это то, что когда я изменяю значение в TrackBar, диаграмма изменяет свои значения в реальномвремя.Когда я изменяю значения, он пересчитывает среднее значение, а затем изменяет форму диаграмм.

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 голосов
/ 17 декабря 2018

Мне удалось обновить график двумя способами.Во-первых, благодаря @TaW я использовал chart.Series.Points.Clear() для перерисовки данных.Затем, чтобы обновить его автоматически, мне пришлось использовать счетчик тиков Time, чтобы обновлять график каждые 100 миллисекунд благодаря @Tim в Добавить таймер в приложение Windows Forms .

После успешного завершения диаграммыВ процессе обновления я пытался использовать функцию chart.Refresh(), упомянутую @ChrizzleWhizzle, но график иногда начинал мигать, поэтому я предпочел использовать первое решение, но оно также было полезным.

Спасибо за ответ каждого.Если я узнаю лучший метод, я опубликую его.

0 голосов
/ 17 декабря 2018

Я никогда не работал с Winforms-Charttool, но вы уже пробовали просто вызвать обновление на объекте chart1-Object?https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datavisualization.charting.chart.refresh?view=netframework-4.7.2

...