回答
你能做到这一点的三个步骤:
- 首先检查是否按下鼠标
- 如果是则在鼠标移动事件保持初始化新矩形拖动鼠标时的位置
- 然后在绘画事件上绘制矩形。 (它会被上调,几乎每一个鼠标事件,取决于鼠标的刷新率和DPI)
你可以做财产以后这样的(在你的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);
}
}
}
后,如果您想检查按钮(如图所示)是矩形或不是,你可以通过检查Button的区域来检查它们是否位于你绘制的矩形中。
嗨,这个作品完美,在pictureBox控件事件上试过同样的东西,但它没有奏效。我做错什么了吗? – 2011-03-01 08:35:11
它正在工作,但可能它是在picturebox(在窗体上)下绘制的..向我展示你尝试的代码..也检查@hans Passant的答案..他的技巧将在每一个地方工作。 – 2011-03-01 08:39:11
现在确定它的工作,在我的情况this.Invalidate();应该是pictureBox1.Invalidate();非常感谢你:) – 2011-03-01 08:42:09
那些蓝色矩形看起来很像控件。在Winforms中很难做到在控件上绘制一条线。您必须创建一个覆盖设计图面的透明窗口,并在该窗口上绘制矩形。这也是Winforms设计器的工作方式。示例代码is here。
+1好用的技巧..如果你还记得我自己的回答是来自你在MSDN上的回答之一,虽然它在这种情况下不起作用。 – 2011-03-01 06:50:57
通过Shekhar_Pro解决方案绘制一个矩形只是在一个方向(从上到下,从左到右),如果你想画一个矩形,无论鼠标位置和移动解决方案的方向:
Point selPoint;
Rectangle mRect;
void OnMouseDown(object sender, MouseEventArgs e)
{
selPoint = e.Location;
// add it to AutoScrollPosition if your control is scrollable
}
void OnMouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point p = e.Location;
int x = Math.Min(selPoint.X, p.X)
int y = Math.Min(selPoint.Y, p.Y)
int w = Math.Abs(p.X - selPoint.X);
int h = Math.Abs(p.Y - selPoint.Y);
mRect = new Rectangle(x, y, w, h);
this.Invalidate();
}
}
void OnPaint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Blue, mRect);
}
- 1. 用鼠标绘制矩形(divs)
- 2. 使用鼠标绘制矩形QML
- 3. Java SWT在画布上使用鼠标事件绘制图形
- 4. c#:我如何跟踪面板上绘制的非矩形图形上的鼠标事件?
- 5. 使用鼠标在c#中绘制矩形
- 6. 如何使用鼠标在C#中绘制矩形
- 7. 在svg上绘制鼠标悬停的覆盖矩形
- 8. 在鼠标点击上绘制每个矩形而不是setLocation
- 9. 角2:用鼠标在画布上绘制矩形。
- 10. Java如何在鼠标点击上绘制矩形
- 11. 如何在基于鼠标移动事件的SVG中绘制矩形
- 12. 在uEye相机c上绘制矩形#
- 13. 在c中绘制矩形#
- 14. C++ sdl基于鼠标位置绘制动态矩形
- 15. 如何在java中的鼠标光标周围绘制矩形?
- 16. 在JPanel上绘制矩形
- 17. 在ImageVIew上绘制矩形
- 18. 如何在点击事件上绘制SVG上的矩形?
- 19. 绘制矩形或线条使用python打开cv使用鼠标事件
- 20. 我想在jcanvas中使用鼠标事件绘制形状
- 21. 如何在鼠标点击坐标的图片框上绘制矩形
- 22. 从坐标绘制矩形
- 23. c + +绘制矩形位置
- 24. 在按下并释放鼠标绘制矩形,opengl
- 25. Java swing在鼠标拖放中绘制矩形
- 26. 在WPF中使用MVVM拖动鼠标时绘制矩形
- 27. 在矩形上绘制圆形
- 28. 在圆形公式上绘制矩形
- 29. ExtJS绘制包和鼠标事件
- 30. 通过鼠标事件绘制成NSView
这是一个橡皮筋选择矩形吗?或者你想让他们在表单上绘制永久形状轮廓? – 2011-03-01 06:34:52
是的,它是橡皮筋的选择,而不是一个永久的 – 2011-03-01 06:44:30