我有一个小应用程序,看起来非常像Windows中的旧版Paint。我使用图片框Paint事件实现了所有Graphic。唯一的问题是,当我单击此按钮时,应出现一个颜色对话框,让我更改笔的颜色。但是每当我点击按钮时,框都不会出现,我的程序会在Paint事件中陷入困境,最精确的是在我执行以下操作的行:
pictureBox1.Image = bmp;
我做错了什么?拜托,我将不胜感激!
我希望以下代码段就足够了。
这是我的picturebox Paint事件:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
using(Graphics g = Graphics.FromImage(bmp))
{
if (lineButton && mouseIsUp)
{
g.DrawLine(myPen, mAnchorPoint, mFinalPoint);
mAnchorPoint = Point.Empty;
mFinalPoint = Point.Empty;
}
pictureBox1.Image = bmp;
}
}
这是当我希望改变笔颜色时触发的按钮事件:
private void ColorButton_Click(object sender, EventArgs e)
{
ColorDialog cd = new ColorDialog();
if (cd.ShowDialog() == DialogResult.OK)
{
myPen.Color = cd.Color;
}
}
答案 0 :(得分:3)
不要在 pictureBox1_Paint 中使用 pictureBox1.Image = bmp; 。代替:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
using(Graphics g = Graphics.FromImage(bmp))
{
if (lineButton && mouseIsUp)
{
g.DrawLine(myPen, mAnchorPoint, mFinalPoint);
mAnchorPoint = Point.Empty;
mFinalPoint = Point.Empty;
}
//pictureBox1.Image = bmp;
}
e.Graphics.DrawImage(bmp, 0, 0);
}
或者,更好的方法,设置 pictureBox1.Image = bmp; 一次,在bmp上做所有的绘图(不在pictureBox1_Paint中)和最后的调用 pictureBox1.Invalidate(); 。您不需要在 pictureBox1_Paint()中编写代码。