Я позаимствовал некоторый код для рисования прямоугольника на изображении, например, как поле выбора. Прямо сейчас код рисует прямоугольник каждый раз, когда вы щелкаете мышью и перетаскиваете ее. Если вы просто щелкаете левой кнопкой мыши без перетаскивания, ничего не происходит - существующий прямоугольник остается на месте. Если щелкнуть и перетащить новый прямоугольник, старый прямоугольник исчезнет.
Это почти так же, как я хочу (я не хочу постоянно рисовать на изображении ... пока ...), но с одним изменением: я бы хотел одним щелчком левой кнопки мыши, чтобы прямоугольник исчез а также.
Код выглядит следующим образом:
public partial class ScreenSelection : Form
{
private Point RectStartPoint;
private Rectangle Rect = new Rectangle();
private Brush selectionBrush = new SolidBrush(Color.FromArgb(128, 72, 145, 220));
public ScreenSelection(DataTable buttonData)
{
InitializeComponent();
}
private void Canvas_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
RectStartPoint = e.Location;
Invalidate();
}
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
Point tempEndPoint = e.Location;
Rect.Location = new Point(
Math.Min(RectStartPoint.X, tempEndPoint.X),
Math.Min(RectStartPoint.Y, tempEndPoint.Y));
Rect.Size = new Size(
Math.Abs(RectStartPoint.X - tempEndPoint.X),
Math.Abs(RectStartPoint.Y - tempEndPoint.Y));
Canvas.Invalidate();
}
private void Canvas_Paint(object sender, PaintEventArgs e)
{
// Draw the rectangle...
if (Canvas.Image != null)
{
if (Rect != null && Rect.Width > 0 && Rect.Height > 0)
{
e.Graphics.FillRectangle(selectionBrush, Rect);
}
}
}
}
У меня также есть пользователь, загружающий растровое изображение как изображение холста, поэтому, как только пользователь сделает это, canvas.image не будет равен нулю.
так как я могу сделать так, чтобы этот прямоугольник исчезал при щелчке левой кнопкой мыши? Я уже делаю аннулирование левой кнопкой мыши, и это явно не избавляет от него.
Я попытался принудительно увеличить размер прямоугольника левой кнопкой мыши, выполнив:
if (e.Button == MouseButtons.Left)
{
RectStartPoint = e.Location;
Rect.Height = 0;
Rect.Width = 0;
Invalidate();
}
и пробовал Rect.Size, Rect = Rectangle.Empty, Canvas.Refresh () ...
Как мне это сделать?
Edit:
Я также попытался сохранить графическое состояние и восстановить его. Это не работает ... (без ошибок, просто не избавляясь от прямоугольника)