在pictureBox画矩形可用mouse调节大小、拖动位置、显示矩形中心十字架
时间: 2023-06-26 21:08:25 浏览: 145
好的,可以使用以下代码来实现你所需要的功能:
1. 首先,在窗体上添加一个 PictureBox 控件。
2. 在 PictureBox 的 MouseDown、MouseMove 和 MouseUp 事件中编写代码以实现拖动和调整大小功能。
3. 在 PictureBox 的 Paint 事件中编写代码以绘制矩形和中心十字架。
下面是一个简单的示例代码,可以根据你的具体需求进行修改和扩展:
```
public partial class Form1 : Form
{
private bool isDragging = false; // 是否正在拖动
private bool isResizing = false; // 是否正在调整大小
private Point lastLocation; // 上次鼠标位置
private Rectangle rect = new Rectangle(50, 50, 100, 100); // 初始矩形
public Form1()
{
InitializeComponent();
pictureBox1.Paint += pictureBox1_Paint;
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (rect.Contains(e.Location))
{
if (e.X >= rect.Right - 5 && e.Y >= rect.Bottom - 5)
{
isResizing = true;
}
else
{
isDragging = true;
}
lastLocation = e.Location;
}
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
rect.X += e.X - lastLocation.X;
rect.Y += e.Y - lastLocation.Y;
lastLocation = e.Location;
pictureBox1.Invalidate();
}
else if (isResizing)
{
rect.Width += e.X - lastLocation.X;
rect.Height += e.Y - lastLocation.Y;
lastLocation = e.Location;
pictureBox1.Invalidate();
}
else
{
if (rect.Contains(e.Location) && (e.X >= rect.Right - 5 || e.Y >= rect.Bottom - 5))
{
pictureBox1.Cursor = Cursors.SizeNWSE;
}
else
{
pictureBox1.Cursor = Cursors.Default;
}
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
isDragging = false;
isResizing = false;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Red, rect);
e.Graphics.DrawLine(Pens.Red, rect.Left + rect.Width / 2, rect.Top, rect.Left + rect.Width / 2, rect.Bottom);
e.Graphics.DrawLine(Pens.Red, rect.Left, rect.Top + rect.Height / 2, rect.Right, rect.Top + rect.Height / 2);
}
}
```
在这个示例中,我们在 PictureBox 的 MouseDown、MouseMove 和 MouseUp 事件中实现了拖动和调整大小功能。在 MouseDown 事件中,我们判断鼠标是否在矩形内,并且在矩形右下角的 5x5 区域内,如果是,则认为是在调整大小。在 MouseMove 事件中,如果正在拖动或调整大小,则根据鼠标位置计算出矩形的新位置和大小,并且重绘 PictureBox。在 MouseUp 事件中,我们清除拖动和调整大小的标志。
在 PictureBox 的 Paint 事件中,我们根据矩形的位置和大小绘制出矩形和中心十字架。
需要注意的是,这个示例代码中没有对矩形进行边界检查,如果矩形拖出了 PictureBox 的范围,可能会出现错误。你可以根据需要进行修改和完善。
阅读全文