c# winform gid绘制 矩形 移动窗体不会被擦掉的方法
时间: 2024-12-24 08:20:11 浏览: 15
在C# WinForm中,如果你想要在一个固定的图形区域(Graphics.Drawing)上绘制矩形,并随着窗口的移动而不丢失矩形,你需要将矩形的位置与窗体位置关联起来,而不是直接绘制在窗体上。以下是实现这个功能的一个基本步骤:
1. **创建一个Graphics对象**:
- 首先,在Form的Paint事件处理程序中,获取Graphics对象,通常是通过`e.Graphics`参数获得。
```csharp
private void Form_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
}
```
2. **保存原点位置**:
- 在开始绘制之前,保存窗体的当前坐标系(即图形的左上角位置)作为参照。
```csharp
Point origin = g.Transform.PointToScreen(new Point(0, 0));
```
3. **动态绘制矩形**:
- 当需要更新矩形位置时,计算新的矩形相对于原点的位置,然后绘制。
```csharp
Rectangle rect = new Rectangle(new Point(x, y), new Size(width, height)); // x, y, width 和 height 是矩形的新位置
g.DrawRectangle Pen, rect; // Pen 是用于描边的颜色和宽度
```
4. **窗体移动时更新位置**:
- 当窗体移动时,你需要调整矩形的位置并重新绘制,同时考虑到平移后的屏幕坐标。
```csharp
private void Form_Move(object sender, EventArgs e)
{
Point newOrigin = g.Transform.PointToScreen(new Point(0, 0)); // 更新原点位置
rect.X = newOrigin.X + (rect.Location.X - origin.X);
rect.Y = newOrigin.Y + (rect.Location.Y - origin.Y); // 调整矩形位置
// 重新绘制矩形
g.Clear(Color.White); // 先清除旧的矩形
DrawRectangle(g, rect);
}
private void DrawRectangle(Graphics g, Rectangle rect)
{
g.DrawRectangle(Pen, rect);
}
```
阅读全文