Рисование на форме в C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Нужно на форме нарисовать фигуру из линий и перестакивать её по форме. Написал такой код (кое-что из MSDN):
private bool mousePressed = true;
 
private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if(mousePressed)
            {
               Graphics g = Graphics.FromHwnd(this.Handle);
               g.Clear(this.BackColor);
                Pen redPen = new Pen(Color.Red, 3);
                Point point1 = new Point(e.X + 50, e.Y + 50);
                Point point2 = new Point(e.X + 100, e.Y + 25);
                Point point3 = new Point(e.X + 200, e.Y + 5);
                Point point4 = new Point(e.X + 250, e.Y + 50);
                Point point5 = new Point(e.X + 300, e.Y + 100);
                Point point6 = new Point(e.X + 350, e.Y + 200);
                Point point7 = new Point(e.X + 250, e.Y + 250);
                Point[] points = { 
                                      point1, point2, point3, point4, point5, point6, point7 
                                  };
                g.DrawLines(redPen, points);
           }
        }
По форме нормально таскать могу, но как только дотаскиваю до начала координат или одной координатной оси линия там и остаётся. Подскажите в чём дело и как это вылечить. Заранее спасибо
Кто-нибудь что-нибудь знает по данному вопросу?

Решение задачи: «Рисование на форме в C#»

textual
Листинг программы
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 System.Runtime.InteropServices;
 
namespace DrawE
{
    public struct POINT
    {
        public int X;
        public int Y;
    }
 
    public partial class mainForm : Form
    {
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool GetCursorPos(out POINT lpPoint);
 
        public IEnumerable<Control> AllControls(Control control)
        {
            foreach (Control _contrl in control.Controls)
            {
                yield return _contrl;
                if (_contrl.Controls.Count > 0)
                    foreach (Control childControl in AllControls(_contrl))
                        yield return childControl;
            }
        }
 
        public mainForm()
        {
            InitializeComponent();
            IEnumerable<Control> allControls = AllControls(this);
            foreach (Control control in allControls)
                control.MouseMove += Form1_MouseMove;
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
                POINT point = new POINT();
                if (GetCursorPos(out point))
                {
                    Graphics g = Graphics.FromHwnd(this.Handle);
                    g.Clear(this.BackColor);
                    Pen redPen = new Pen(Color.Red, 3);
                    Point point1 = new Point(e.X + 0, e.Y + 0);
                    Point point2 = new Point(e.X + 100, e.Y + 25);
                    Point point3 = new Point(e.X + 200, e.Y + 5);
                    Point point4 = new Point(e.X + 250, e.Y + 50);
                    Point point5 = new Point(e.X + 300, e.Y + 100);
                    Point point6 = new Point(e.X + 350, e.Y + 200);
                    Point point7 = new Point(e.X + 250, e.Y + 250);
                    Point[] points = { 
                                      point1, point2, point3, point4, point5, point6, point7 
                                  };
                    g.DrawLines(redPen, points);
                }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5