我有一个应用程序,它使用鼠标在picbox图像上自由绘制一个矩形。然而,矩形只显示在picbox后面,而不是在它的顶部。有没有我可以设置的属性可以解决这个问题? (在picbox图像上显示rect而不是在后面)。这是代码:
System.Drawing.Graphics picboxGraphics;
bool mDown = false;
int mouseX;
int mouseY;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
mDown = true;
mouseX = e.X;
mouseY = e.Y;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (mDown == true)
{
this.Refresh();
Pen drawPen = new Pen(Color.Red, 5);
int width = e.X - mouseX, height = e.Y - mouseY;
Rectangle rect = new Rectangle(mouseX, mouseY, width * Math.Sign(width), height * Math.Sign(height));
picboxGraphics = this.CreateGraphics();
picboxGraphics.DrawRectangle(drawPen, rect);
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
mDown = false;
}
答案 0 :(得分:0)
您可以从picbox背后的表单创建图形 你可以从picbox的图像创建图形并绘制一些东西。但是如果你想要图层系统,你可以在透明图像上绘制你的图像并将它们组合起来。使用此vay,您可以制作撤消或删除图层系统。
答案 1 :(得分:0)
您的代码中存在几个问题:dispose,全局变量和用于创建图形的错误控件。这样做:
using(var graphics = (sender as Control).CreateGraphics())
graphics.DrawRectangle(drawPen, rect);
但老实说,你必须以不同的方式组织它(假设你要模仿Paint):
Paint
事件绘图对象(如果有)Invalidate
您可以支持List
个对象存储多个矩形,并将历史记录支持(如TC Alper Tokcan答案建议)添加到至少Undo
最后一个对象。