none
C#画曲线图 RRS feed

  • 问题

  • 请问c#画曲线图当画满一屏幕的时候,如何擦除前一段曲线然后换成新的曲线?

    还有就是如何把数据对应的曲线画到电脑屏幕上啊?


    please verify my account

    2017年10月18日 4:54

全部回复

  • Hi,

    感谢在MSDN论坛发帖。

    根据我了解,没有找到单独擦出一段曲线的方式,一般都是让这块画布直接清楚,然后在画。

    使用下面两个方法,就可以让画布擦除。

    this.Invalidate();
    
    e.Graphics.Clear(Color.Teal);
    

    >>还有就是如何把数据对应的曲线画到电脑屏幕上啊?

    显示在电脑屏幕是什么意思? 不是你画出来以后,直接就显示出来了吗?

    下面这段代码,就可以显示曲线在winform的界面上。

    System.Drawing.Graphics formGraphics = this.CreateGraphics();
    System.Drawing.Pen myPen;
    myPen = new System.Drawing.Pen(System.Drawing.Color.Black);
    
    // Draw head with an ellipse.
    formGraphics.DrawEllipse(myPen, 0, 0, 200, 200);
    
    // Draw winking eye with an arc.
    formGraphics.DrawArc(myPen, 40, 40, 40, 40, 180, -180);
    
    // Draw open eye with an ellipse.
    formGraphics.DrawEllipse(myPen, 120, 40, 40, 40);
    
    // Draw nose with a Bezier spline.
    formGraphics.DrawBezier(myPen, 100, 60, 120, 100, 90, 120, 80, 100);
    
    // Draw mouth with a canonical spline.
    Point[] apt = new Point[4];
    apt[0] = new Point(60, 140);
    apt[1] = new Point(140, 140);
    apt[2] = new Point(100, 180);
    apt[3] = new Point(60, 140);
    formGraphics.DrawCurve(myPen, apt, 0, 3, 0.9f);
    
    myPen.Dispose();
    formGraphics.Dispose();

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年10月19日 2:52
    版主
  • 你好,能详细解释一下吗?

    我的意思是:

    画一条曲线,画满一屏幕,然后我又从头画,我想的是擦除一小段,然后画成新的,在擦除一小段,又画成新的,如图:

    还有就是数据的值是10000,我怎么数据对应的曲线画到电脑屏幕上?


    please verify my account

    2017年10月19日 3:18
  • Hi,

    我通过winform 里面添加WPF的控件,可以达到下面的效果,你可以看一下。

    winform 里面的代码如下面;

     public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                elementHost1.Child = inkCanvas;
            }
    
            System.Windows.Controls.InkCanvas inkCanvas = new System.Windows.Controls.InkCanvas();        
    
            //System.Windows.Controls.Button buttonWPF = new System.Windows.Controls.Button();
            //System.Windows.Forms.Button buttonWinform = new System.Windows.Forms.Button();
    
            private void Form1_Load(object sender, EventArgs e)
            {
                foreach (InkCanvasEditingMode mode in Enum.GetValues(typeof(InkCanvasEditingMode)))
                {
                    this.comboBox1.Items.Add(mode);
                }
                this.comboBox1.SelectedIndex = 0;
    
            }
    
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                inkCanvas.EditingMode = (InkCanvasEditingMode)comboBox1.SelectedItem;
            }
        }

    你需要添加这个控件,在Winform 里面

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年10月19日 8:27
    版主
  • 你好,还有点不明白,就是我有一组数据

    [10000,12345,45678,56789,12345,21144,.......]

    这些数据对应的曲线如何才能画到电脑屏幕上,因为屏幕只有几百的高度

    还有就是一屏幕显示的数据不固定,比如说一屏幕显示3000个数据的曲线,当一屏幕画完的时候,我想擦出前面的200个的数据的曲线,然后补上新的200个数据的曲线,依次类推

    我该怎么用程序擦除曲线,并找到应该擦除的起始和结束位置,

    谢谢


    please verify my account

    2017年10月20日 2:39