2014-10-31 26 views
1

Принесите меня, я новичок в переполнении стека, но долгое время использовал его в качестве ресурса при изучении методов программирования, с которыми я не люблю.C# - Обновление диаграммы в реальном времени

Я прочитал tutorial on how to create a graph in a C# Windows Forms Application и пытался выяснить, как заставить его обновлять себя в режиме реального времени, если мне когда-либо понадобится использовать график для построения общего объема данных в датчике. Чтобы проверить это, я использую таймер, тикающий каждую секунду (1000 мс). И прежде чем я смогу использовать это с датчиком, у меня есть два значения, автоматически увеличивающиеся на 1.

Текущая проблема, с которой я сталкиваюсь, заключается в том, что сама диаграмма не будет обновляться и остается только в том виде, в каком она была нарисована когда форма загружена. I thought it was because I have to redraw the chart withchart1.Update();, и я попытался использовать это до/после воссоздания диаграммы каждую секунду. Однако результат будет тем же самым. Я просто задавался вопросом, есть ли что-то, чего я не сделал или его нужно изменить, чтобы обновить график в режиме реального времени.

Это где код на данный момент:

public partial class Form1 : Form 
{ 
    int a = 1; 
    int b = 2; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     // Data arrays. 
     string[] seriesArray = { "Cats", "Dogs" }; 
     int[] pointsArray = { a, b }; 

     // Set palette. 
     this.chart1.Palette = ChartColorPalette.SeaGreen; 

     // Set title. 
     this.chart1.Titles.Add("Pets"); 

     // Add series. 
     for (int i = 0; i < seriesArray.Length; i++) 
     { 
      // Add series. 
      Series series = this.chart1.Series.Add(seriesArray[i]); 

      // Add point. 
      series.Points.Add(pointsArray[i]); 
     } 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     a++; 
     b++; 

     // Data arrays. 
     string[] seriesArray = { "Cats", "Dogs" }; 
     int[] pointsArray = { a, b }; 

     // Set palette. 
     this.chart1.Palette = ChartColorPalette.SeaGreen; 

     // Set title. 
     this.chart1.Titles.Add("Pets"); 

     // Add series. 
     for (int i = 0; i < seriesArray.Length; i++) 
     { 
      // Add series. 
      Series series = this.chart1.Series.Add(seriesArray[i]); 

      // Add point. 
      series.Points.Add(pointsArray[i]); 
     } 

     chart1.Update(); 
    } 
} 
+0

Посмотрите http://sourceforge.net/projects/zedgraph/ –

+0

Вы пробовали использовать [.refresh()] (http://stackoverflow.com/questions/21909196/msdn-charts- change-point-values-realtime) вместо .Update()? – BCdotWEB

+2

Не должно быть необходимости. Это Таймер начался? И вы попадаете в TIck? – TaW

ответ

3

Ваш код имеет несколько проблем:

  • Таймер нажмите событие не зацепили. Я знаю, что это не потому, что иначе вы бы получили исключение, говорящее вам, что ..
  • .. вы можете добавить только серию . Вы делали это на каждом timer.Tick. Эта и все другие команды настройки должны войти в исходный метод, например, для загрузки формы.

Я исправил ошибки в приведенном ниже коде, но, очевидно, данные еще не имеют никакого смысла. Также: Хотя я добавил код для подключения timer.Tick, button.Click не подключен. Обычно вы позволяете дизайнеру сделать это, дважды щелкнув элемент управления, чтобы подключить стандартное событие элемента управления или дважды щелкнув событие на вкладке событий элемента управления на странице свойств.

int a = 1; 
int b = 2; 
string[] seriesArray = { "Cats", "Dogs" }; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    // Set palette. 
    this.chart1.Palette = ChartColorPalette.SeaGreen; 

    // Set title. 
    this.chart1.Titles.Add("Pets"); 

    // Add series 
    this.chart1.Series.Clear(); 
    for (int i = 0; i < seriesArray.Length; i++) 
    { 
     chart1.Series.Add(seriesArray[i]); 
    } 
    // hook up timer event 
    timer1.Tick += timer1_Tick; 
} 




private void timer1_Tick(object sender, EventArgs e) 
{ 
    a++; 
    b++; 

    // Data array 
    int[] pointsArray = { a, b }; 

    for (int i = 0; i < seriesArray.Length; i++) 
    { 
     // Add point. 
     chart1.Series[i].Points.Add(pointsArray[i]); 
    } 

} 

private void button1_Click(object sender, EventArgs e) 
{ 
    timer1.Start(); 
} 
Смежные вопросы