• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2292
  • Last Modified:

Draw Oscilloscope line chart on a Windows Form


I am trying to draw oscilloscope-like line chart on a Windows Form in C#. The data contains thousands of sample points along certain time period. so the line easily gets to exceed the border of the form.
I wonder if there is any way I can add a scroll bar so that  the points with X-coordinates beyond the limit of the form can be seen, instead of being clipped out.

Thanks a lot
2 Solutions
No there is not, unfortunately.  Why don't you create an image in memory, and draw on that?  Then you have a PictureBox object on your form that you can set to display your image every time you add a point.  The PictureBox would then have scroll bars.  Or create a custom control that you will draw to instead.

But what I am really wondering is why you don't just size your output to the form's current size?
it can be done. i did the exact same thing. i didn't want to resize or distort the graph.

i used a panel within a panel, and drew on the child panel. if the x coordinate was greater than the width, i increased the child panel's width to the x value. and i set the parent panel's autoscroll property to true.
stone123Author Commented:
It sounds like a good idea, msdixon. However, when I move the scroll bar, the line changes its length. it becomes shorter than the original one.

you will see the same effect if you try the following code.
Graphics g = panel1.CreateGraphics();
Pen myPen = new Pen(Color.Blue);
myPen.Width = 2;
panel1.Width = 2000;
g.DrawLine(myPen, 0, 50, 2000, 50);

Thanks a lot

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

stone123Author Commented:
This is to eternal_21,

How do you draw a line on a System.Drawing.Image object? Can you provide more detail?

if i remember right, i had to override the paint event, and redraw the graph every time. it also had some flicker, but that's another issue.
if you want to draw on an Image object you can do something like:

Graphics g = Graphics.FromImage( <your image> )

if you really have a large number of  points you coudl draw only a range of point that fit the width of the display area and use a scrollbar control to change only the position where the range of points 'to be drawn' starts (and ends).

this way you won't have to use an extra picturebox nor draw in a image
and i think it will be faster


Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Tackle projects and never again get stuck behind a technical roadblock.
Join Now