Здравствуйте, уважаемые пользователи форума. Вчера посидел поразбирался с рисованием на pictureBox в принципе всё было ясно, но результат мне не нравится структура программы. Вот листинг кода(чтобы не утежелять, я кину только рисование линии(по сути с рисованием других элементов не возникло также проблем):
| Код | 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 GrEditor { public partial class Form1 : Form { public Form1() { InitializeComponent(); } List<ManyPoints> manyPointses = new List<ManyPoints>{}; private bool isClicked = false; private bool DrawLineClicked = false;
int X = 0; int Y = 0; int X1 = 0; int Y1 = 0;
private void DrawLine_Click(object sender, EventArgs e) { DrawLineClicked = true; DrawRectangleClicked = false; DrawElipseClicked = false; }
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (DrawLineClicked == true) { isClicked = true; X = e.X; Y = e.Y; }
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (isClicked == true) { X1 = e.X; Y1 = e.Y; pictureBox1.Invalidate(); } }
private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { isClicked = false; manyPointses.Add(new ManyPoints(new Point(X, Y), new Point(X1, Y1))); }
private void pictureBox1_Paint(object sender, PaintEventArgs e) { if (DrawLineClicked == true) { Pen pen = new Pen(Color.Black); e.Graphics.DrawLine(pen, new Point(X, Y), new Point(X1, Y1)); foreach (var val in manyPointses) { e.Graphics.DrawLine(pen, val.X, val.Y); } }
}
} }
|
И класс ManyPoints
| Код | using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace GrEditor { class ManyPoints { public Point X; public Point Y;
public ManyPoints(Point x, Point y) { X = x; Y = y; } } }
|
Встал вопрос, как это сделать более структурно, через принципы ООП. Суть в принципе я разложил сегодня ночью. Нужно создать класс Figure. От него сделать наследованием два класса, один из них рисование линий, другой рисование 2D объектов(таких как прямоугольник, эллипс и так далее). Вопрос встал в том, а как это сделать? Ведь pictureBox1 работает только на Form1 и с ним работать(как и с кнопками) я в других классах не могу.
p.s. дополнительный вопрос, как сделать очищение нарисованных элементов? Пробовал через: pictureBox1.Image = null; не особо и помогло, всё нарисованное оставалось на месте. |