c#写可拖拽的ROI矩形区域
时间: 2023-08-02 11:23:04 浏览: 155
在C#中,可以通过继承`Control`类来自定义可拖拽的ROI矩形区域。以下是一个简单的示例:
```csharp
public class ROIRectangle : Control
{
private bool dragging;
private Point dragStart;
private Rectangle rect;
public ROIRectangle(Rectangle rect)
{
this.rect = rect;
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer, true);
// 设置控件的样式,使得可以进行自绘,并且防止闪烁
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawRectangle(Pens.Red, rect);
// 绘制矩形区域
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (e.Button == MouseButtons.Left && rect.Contains(e.Location))
{
dragging = true;
dragStart = e.Location;
// 鼠标左键按下并且鼠标位置在矩形内部,开始拖拽
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (dragging)
{
int dx = e.Location.X - dragStart.X;
int dy = e.Location.Y - dragStart.Y;
rect.Offset(dx, dy);
dragStart = e.Location;
Invalidate();
// 拖拽过程中,更新矩形的位置,并且触发控件的重新绘制
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
if (dragging)
{
dragging = false;
// 鼠标左键松开,停止拖拽
}
}
}
```
在使用时,可以创建一个`ROIRectangle`对象,并添加到某个容器控件中。例如:
```csharp
var rect = new Rectangle(100, 100, 50, 50);
var roi = new ROIRectangle(rect);
panel1.Controls.Add(roi);
```
这样就可以在`panel1`容器中显示一个可拖拽的矩形区域了。
阅读全文