Вы можете сделать это в три шага:
- Сначала проверьте, нажата ли мышь вниз
- Если это происходит при событии перемещения мыши, продолжайте инициализировать прямоугольник новыми позициями, пока мышь
- Затем на событии рисования нарисуйте прямоугольник.(Он будет повышен почти для каждого события мыши, зависит от частоты обновления мыши и точек на дюйм)
Вы можете сделать что-то вроде этого (в вашем Form
):
public class Form1
{
Rectangle mRect;
public Form1()
{
InitializeComponents();
//Improves prformance and reduces flickering
this.DoubleBuffered = true;
}
//Initiate rectangle with mouse down event
protected override void OnMouseDown(MouseEventArgs e)
{
mRect = new Rectangle(e.X, e.Y, 0, 0);
this.Invalidate();
}
//check if mouse is down and being draged, then draw rectangle
protected override void OnMouseMove(MouseEventArgs e)
{
if( e.Button == MouseButtons.Left)
{
mRect = new Rectangle(mRect.Left, mRect.Top, e.X - mRect.Left, e.Y - mRect.Top);
this.Invalidate();
}
}
//draw the rectangle on paint event
protected override void OnPaint(PaintEventArgs e)
{
//Draw a rectangle with 2pixel wide line
using(Pen pen = new Pen(Color.Red, 2))
{
e.Graphics.DrawRectangle(pen, mRect);
}
}
}
позже, если вы хотите проверить, находятся ли кнопки (показанные на диаграмме) в прямоугольнике или нет, вы можете сделать это, проверив область кнопки и проверив, лежат ли они в нарисованном прямоугольнике.