Загрузка данных


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;

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

        private void Form1_Load(object sender, EventArgs e)
        { }
            class CanonicalSpline : Form
        {
            protected Point[] apt = new Point[4];
            protected float fTension = 0.5f;

            public static void Main()
            {
                Application.Run(new CanonicalSpline());
            }
            public CanonicalSpline()
            {
                Text = "Canonical Spline";
                BackColor = SystemColors.Window;
                ForeColor = SystemColors.WindowText;
                ResizeRedraw = true;

                ScrollBar scroll = new VScrollBar();
                scroll.Parent = this;
                scroll.Dock = DockStyle.Right;
                scroll.Minimum = -100;
                scroll.Maximum = 109;
                scroll.SmallChange = 1;
                scroll.LargeChange = 10;
                scroll.Value = (int)(10 * fTension);
                scroll.ValueChanged += new EventHandler(ScrollOnValueChanged);

                OnResize(EventArgs.Empty);
            }
            void ScrollOnValueChanged(object obj, EventArgs ea)
            {
                ScrollBar scroll = (ScrollBar)obj;

                fTension = scroll.Value / 10f;

                Invalidate(false);
            }
            protected override void OnResize(EventArgs ea)
            {
                base.OnResize(ea);

                int cx = ClientSize.Width;
                int cy = ClientSize.Height;

                apt[0] = new Point(cx / 4, cy / 2);
                apt[1] = new Point(cx / 2, cy / 4);
                apt[2] = new Point(cx / 2, 3 * cy / 4);
                apt[3] = new Point(3 * cx / 4, cy / 2);
            }
            protected override void OnMouseDown(MouseEventArgs mea)
            {
                Point pt;

                if (mea.Button == MouseButtons.Left)
                {
                    if (ModifierKeys == Keys.Shift)
                        pt = apt[0];
                    else if (ModifierKeys == Keys.None)
                        pt = apt[1];
                    else
                        return;
                }
                else if (mea.Button == MouseButtons.Right)
                {
                    if (ModifierKeys == Keys.None)
                        pt = apt[2];
                    else if (ModifierKeys == Keys.Shift)
                        pt = apt[3];
                    else
                        return;
                }
                else
                    return;

                Cursor.Position = PointToScreen(pt);
            }
            protected override void OnMouseMove(MouseEventArgs mea)
            {
                Point pt = new Point(mea.X, mea.Y);

                if (mea.Button == MouseButtons.Left)
                {
                    if (ModifierKeys == Keys.Shift)
                        apt[0] = pt;
                    else if (ModifierKeys == Keys.None)
                        apt[1] = pt;
                    else
                        return;
                }
                else if (mea.Button == MouseButtons.Right)
                {
                    if (ModifierKeys == Keys.None)
                        apt[2] = pt;
                    else if (ModifierKeys == Keys.Shift)
                        apt[3] = pt;
                    else
                        return;
                }
                else
                    return;

                Invalidate();
            }
            protected override void OnPaint(PaintEventArgs pea)
            {
                Graphics grfx = pea.Graphics;
                Brush brush = new SolidBrush(ForeColor);

                grfx.DrawCurve(new Pen(ForeColor), apt, fTension);

                grfx.DrawString("Tension = " + fTension, Font, brush, 0, 0);

                for (int i = 0; i < 4; i++)
                    grfx.FillEllipse(brush, apt[i].X - 3, apt[i].Y - 3, 7, 7);
            }
        }

    }
}