Как я могу нарисовать прямоугольник во всех направлениях? Текущий код:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
// Starting point of the selection:
if (e.Button == MouseButtons.Left)
{
_selecting = true;
_selection = new Rectangle(new Point(e.X, e.Y), new Size());
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
// Update the actual size of the selection:
if (_selecting)
{
_selection.Width = e.X - _selection.X;
_selection.Height = e.Y - _selection.Y;
pictureBox1.Refresh(); // redraw picturebox
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && _selecting)
{
_selecting = false;
}
}
Это позволяет мне набрать MouseDown
, а затем рисовать вниз и вправо, но я не могу рисовать ни в каком другом направлении, кроме точки привязки. Как нарисовать прямоугольник в любом направлении, например, Microsoft Paint?
![enter image description here](https://i.stack.imgur.com/Jm89q.png)
Сначала я попробовал:
_selection.Width = Math.Abs(e.X - _selection.X);
_selection.Height = Math.Abs(e.Y - _selection.Y);
Но это создает забавный зеркальный эффект (чего я не хочу). Затем я попытался простой сдвиг:
_selection.X = _selection.Left - 5;
Это сделало то, что я ожидал, и переехал Стать c прямоугольник 5 единиц влево, так что я думал, что это было бы простым дело постоянно смещая точку привязки во время Событие рисования:
private void UpdateRectange(Point newPos)
{
var width = newPos.X - _selection.X;
var height = newPos.Y - _selection.Y;
_selection.Width = Math.Abs(width);
_selection.Height = Math.Abs(height);
if (width < 0 && height > 0) // move down (+) and left (-)
{
//_selection.X = _selection.Left + width;
_selection.Offset(width, 0);
}
uxScreenGrab.Refresh(); // redraw picturebox
}
Но это привело к перемещению вертикальной линии через экран влево при перемещении влево от исходной точки привязки. Ширина по некоторым причинам не обновляется должным образом.
![enter image description here](https://i.stack.imgur.com/m6GMQ.png)