您好我会选择区域来剪切picturebox
控件上的图像。
我有以下代码:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Rectangle rect;
private Pen p;
public Form1()
{
InitializeComponent();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (this.p == null)
this.p = new Pen(Color.FromArgb(100, 200, 200, 200), 5);
if (this.rect.Width > 0)
e.Graphics.DrawRectangle(this.p, this.rect);
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (e.X < this.rect.X)
{
this.rect.Width = this.rect.X - e.X;
this.rect.X = e.X;
}
else
{
this.rect.Width = e.X - this.rect.X;
}
if (e.Y < this.rect.Y)
{
this.rect.Height = this.rect.Y - e.Y;
this.rect.Y = e.Y;
}
else
{
this.rect.Height = e.Y - this.rect.Y;
}
this.Invalidate(this.rect);
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
this.rect.X = e.X;
this.rect.Y = e.Y;
}
}
}
这里返回错误:
Application.Run(new Form1());
为什么?
感谢所有回复; p
答案 0 :(得分:3)
您不应该丢弃作为PaintEventArgs的一部分传递的Graphics对象。这可能是导致你的问题的原因。
答案 1 :(得分:1)
尝试使用此优化代码,如果您在此处仍然收到错误(编辑原始问题),我们会看到。
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (this.p == nulll)
this.p = new Pen(Color.FromArgb(100, 200, 200, 200), 5);
if (this.rect.Width > 0)
e.Graphics.DrawRectangle(this.p, this.rect);
}
答案 2 :(得分:0)
错误是什么?
你正在泄漏Pen的。对于每一条油漆信息,你都会创建一支新笔并抛弃旧笔而不进行处理。离开我的头顶我不记得你是否应该处理你从事件args中获得的图形对象