在 WinForms 中更新雷达图
Update Radar Chart in WinForms
我有以下 UI,其中雷达图中的值是通过某些 TrackBar 值的算术平均值计算得出的。 'Player' 对象获取这些值,计算平均值,然后 returns 返回雷达图数据系列。
我想做的是当我更改 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]);
}
}
我正在尝试清除旧图表并重新绘制新图表,但无法正常工作。
我从未使用过 Winforms-Charttool,但您是否已经尝试过在 chart1-Object 上调用刷新?
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datavisualization.charting.chart.refresh?view=netframework-4.7.2
我设法使用两种方法更新了图表。首先感谢@TaW 我使用 chart.Series.Points.Clear()
重绘数据。然后,为了自动更新它,我必须使用时间滴答计数器每 100 毫秒更新一次图表,这要感谢@Tim
Add timer to a Windows Forms application.
图表更新成功后,我尝试使用@ChrizzleWhizzle提到的chart.Refresh()
功能,但图表有时会闪烁,所以我更喜欢使用第一种解决方案,但它也很有帮助。
谢谢大家的回答。如果我知道更好的方法,我会 post 它。
我有以下 UI,其中雷达图中的值是通过某些 TrackBar 值的算术平均值计算得出的。 'Player' 对象获取这些值,计算平均值,然后 returns 返回雷达图数据系列。
我想做的是当我更改 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]);
}
}
我正在尝试清除旧图表并重新绘制新图表,但无法正常工作。
我从未使用过 Winforms-Charttool,但您是否已经尝试过在 chart1-Object 上调用刷新? https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datavisualization.charting.chart.refresh?view=netframework-4.7.2
我设法使用两种方法更新了图表。首先感谢@TaW 我使用 chart.Series.Points.Clear()
重绘数据。然后,为了自动更新它,我必须使用时间滴答计数器每 100 毫秒更新一次图表,这要感谢@Tim
Add timer to a Windows Forms application.
图表更新成功后,我尝试使用@ChrizzleWhizzle提到的chart.Refresh()
功能,但图表有时会闪烁,所以我更喜欢使用第一种解决方案,但它也很有帮助。
谢谢大家的回答。如果我知道更好的方法,我会 post 它。