在c#窗体中 将picture位置固定不动 将picture内部的图片相对于picture进行移动
时间: 2024-10-11 22:11:44 浏览: 52
在C# Windows Form程序中,如果想要保持PictureBox(PictureBox是用于显示图片的控件)的位置固定不变,但又想让PictureBox内的图片相对于PictureBox自身位置进行移动,你可以在PictureBox的Paint事件处理程序中操作。以下是一个简单的示例:
1. **设置PictureBox的AutoScaleMode**:为了能够根据图片自适应PictureBox的大小,通常会将PictureBox的AutoScaleMode设置为`AutoScaleMode.None`。
```csharp
pictureBox.AutoScaleMode = AutoScaleMode.None;
```
2. **添加Paint事件处理器**:
- 在设计时选择PictureBox并双击打开代码编辑器,或者手动编写 Paint 方法。这里我们使用 MouseMove 事件作为触发点,每当鼠标移动时,图片跟着移动。
```csharp
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
// 获取PictureBox当前的位置
Point pictureBoxPosition = pictureBox.PointToClient(Control.MousePosition);
// 使用Graphics对象在PictureBox内绘制图片,并相对于PictureBox的位置
Graphics g = e.Graphics;
Image image = pictureBox.Image;
int imageOffsetX = pictureBoxPosition.X - pictureBox.Location.X; // 图片左边缘与PictureBox左边缘的距离
int imageOffsetY = pictureBoxPosition.Y - pictureBox.Location.Y; // 同理计算Y轴距离
g.DrawImage(image, pictureBox.ClientRectangle.X + imageOffsetX, pictureBox.ClientRectangle.Y + imageOffsetY);
}
```
每次鼠标移动时,PictureBox内部的图片会根据鼠标的新位置在PictureBox内相对移动。
阅读全文