Рисование на форме в 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);
}
}
}
}