Итак, я пытаюсь позволить пользователю рисовать прямоугольники на форме, и все идет хорошо, когда я рисую сверху вниз, справа внизу. Как только позиция X или Y станет меньше оригинала, он прекращает рисование и прямоугольник исчезает.
Я внес некоторые изменения в метод рисования, чтобы попытаться отрегулировать его положение и переместить его туда, где он должен быть, чтобы имитировать это поведение, но оно просто не работает правильно. Есть ли лучший способ сделать это? Я могу получить несколько прямоугольников на экране и даже двойной щелчок, чтобы обнаружить и удалить их. Я просто не могу заставить их рисовать в любом другом направлении, кроме нижнего правого
// All rectangles saved to the form
private List<Rectangle> rects;
// Current rectangle if one is being drawn
private Rectangle tempRect;
public Form1()
{
InitializeComponent();
rects = new List<Rectangle>();
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
tempRect = new Rectangle(e.X, e.Y, 0, 0);
this.Invalidate();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
int tempX = tempRect.X;
int tempY = tempRect.Y;
int tempWidth = tempRect.Width;
int tempHeight = tempRect.Height;
if (e.X < tempRect.Location.X)
{
tempX = e.X;
tempWidth = tempRect.Width + (tempRect.Location.X - e.X);
}
else
tempWidth = e.X - tempRect.Location.X;
if (e.Y < tempRect.Location.Y)
{
tempY = e.Y;
tempHeight = tempRect.Height + (tempRect.Location.Y - e.Y);
}
else
tempHeight = e.Y - tempRect.Location.Y;
Point rectLocation = new Point(tempX, tempY);
Size rectSize = new Size(tempWidth, tempHeight);
tempRect = new Rectangle(rectLocation, rectSize);
this.Invalidate();
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
// Must be within constraint, prevents tiny invisible rectangles from being added
if (tempRect.Width >= 10 && tempRect.Height >= 10)
rects.Add(tempRect);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
using (Pen pen = new Pen(Color.Black, 2))
{
// Redraws all existing rectangles onto the form
foreach (Rectangle rect in rects)
e.Graphics.DrawRectangle(pen, rect);
// Must be within constraint, prevents tiny invisible rectangles from being added
if (tempRect.Width >= 10 && tempRect.Height >= 10)
e.Graphics.DrawRectangle(pen, tempRect);
}
}