2016-11-04 3 views
4

私は最近、LiveChartというツールに遭遇し、それをテストすることに決めました。チャートの値を正しく更新するにはどうすればよいですか? (リアルタイムで)

残念ながら、グラフの値をリアルタイムで更新する方法についてはいくつか問題がありました。私はそれを行うのきれいで正しい方法があると確信していますが、私はそれを見つけるために縫い合わせることはできません。

private voidまたはボタンを使用して値を更新したいと考えています。

私のコードでは、ToolStripMenuでテストしています。

[CODE]:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using LiveCharts; 
using LiveCharts.WinForms; 
using LiveCharts.Wpf; 
using PokeShowdown_AccStats_T.Properties; 
using LiveCharts.Defaults; 

namespace PokeShowdown_AccStats_T 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      //int val1 = int.Parse(Settings.Default.Value1); 

      var value1 = new ObservableValue(3); 
      var value2 = new ObservableValue(7); 
      var value3 = new ObservableValue(10); 
      var value4 = new ObservableValue(2); 

      //value1.Value = 5; 

      cartesianChart1.Series.Add(new LineSeries 
      { 
       Values = new ChartValues<ObservableValue> { value1, value2, value3, value4 }, 
       StrokeThickness = 4, 
       StrokeDashArray = new System.Windows.Media.DoubleCollection(20), 
       Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(107, 185, 69)), 
       Fill = System.Windows.Media.Brushes.Transparent, 
       LineSmoothness = 0, 
       PointGeometry = null 
      }); 



      cartesianChart1.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(34, 46, 49)); 

      cartesianChart1.AxisX.Add(new Axis 
      { 
       IsMerged = true, 
       Separator = new Separator 
       { 
        StrokeThickness = 1, 
        StrokeDashArray = new System.Windows.Media.DoubleCollection(2), 
        Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(64, 79, 86)) 
       } 
      }); 
      cartesianChart1.AxisY.Add(new Axis 
      { 
       IsMerged = true, 
       Separator = new Separator 
       { 
        StrokeThickness = 1.5, 
        StrokeDashArray = new System.Windows.Media.DoubleCollection(4), 
        Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(64, 79, 86)) 
       } 
      }); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void changeValue1ToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      Settings.Default.Value1 = "10"; 
      Settings.Default.Save(); 
      this.Text = Settings.Default.Value1; 

     } 

     private void changeValue1To3ToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      Settings.Default.Value1 = "3"; 
      Settings.Default.Save(); 
      this.Text = Settings.Default.Value1; 

     } 
    } 
} 
+0

チャートは、データバインディングをサポートしています。データバインディングと更新データソースを使用します。 –

答えて

6

ライブ・チャートは、単純な、それを維持しようとします。論理は、プロットする必要のあるタイプのジェネリックコレクションを使用し、このコレクションの要素を追加/削除または更新するのと同じくらい簡単に、チャートが更新されます。

あなたの質問に答えるために、あなたが通常行う必要があります。

public partial class Form1 : Form 
{ 
    private ObservableValue value1; 

    public Form1() 
    { 
     InitializeComponent(); 

     //int val1 = int.Parse(Settings.Default.Value1); 

     value1 = new ObservableValue(3); 
     //... 

     cartesianChart1.Series.Add(new LineSeries 
     { 
      Values = new ChartValues<ObservableValue> { value1, ... }, 
     }); 
    } 

    private void changeValue1ToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     value1.Value = 10; 
     Settings.Default.Value1 = "10"; 
     Settings.Default.Save(); 
     this.Text = Settings.Default.Value1; 

    } 
} 

次にライブラリがアニメーションを処理すると、更新

enter image description here

2

注:質問はLiveChartsについてです。しかし、この回答はMSChartに基づいて掲載されています。 LiveChartsに関する回答を見るには、他の答えを見てください。

グラフはデータバインディングをサポートしています。データバインディングを使用してデータソースを更新し、次にチャートを更新します。たとえば:

DataTable table = new DataTable(); 
Random random = new Random(); 
private void Form1_Load(object sender, EventArgs e) 
{ 
    table.Columns.Add("X", typeof(int)); 
    table.Columns.Add("Y", typeof(int)); 
    for (int i = 0; i < 10; i++) 
     table.Rows.Add(i+1, random.Next(100)); 
    chart1.Series[0].ChartType = 
     System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column; 
    chart1.Series[0].XValueMember = "X"; 
    chart1.Series[0].YValueMembers = "Y"; 
    chart1.DataSource = table; 
    chart1.ChartAreas[0].AxisX.Interval = 1; 
    chart1.ChartAreas[0].AxisX.Minimum = 0; 
    chart1.ChartAreas[0].AxisX.Maximum = 10; 
    chart1.ChartAreas[0].AxisY.Interval = 10; 
    chart1.ChartAreas[0].AxisY.Minimum = 0; 
    chart1.ChartAreas[0].AxisY.Maximum = 100; 
    chart1.DataBind(); 
    var timer = new Timer() { Interval= 300}; 
    timer.Tick += timer_Tick; 
    timer.Start(); 
} 
void timer_Tick(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 10; i++) 
     table.Rows[i][1]= random.Next(100); 
    chart1.DataBind(); 
} 

enter image description here

+0

これはOPが尋ねるものではなく、彼はライブチャートをアバットでお願いしています。 –

+0

@ bto.rdz編集でlivechartsタグを紛失して誤って削除したようです。はい、質問はライブチャットについてです。 –

+0

@btoまた、答えを落としたyou/otherの人は、それを消すだけの答えをdonwvoteする必要はありません。この投稿は、mschartを使用してこのテクニックをしたい将来の読者には便利です。代わりに良い答えを投稿することができ、他の回答を消す必要はありません。 –

関連する問題