我有一个小应用程序,看起来非常像 Windows 中的旧画图软件。我使用图片框 Paint 事件实现了所有图形。唯一的问题是,当我单击此按钮时,应该会出现一个颜色对话框,让我更改笔的颜色。但是,每当我单击该按钮时,该框就不会出现,并且我的程序卡在 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;
}
}
这是当我想更改笔颜色时触发的按钮事件:
private void ColorButton_Click(object sender, EventArgs e)
{
ColorDialog cd = new ColorDialog();
if (cd.ShowDialog() == DialogResult.OK)
{
myPen.Color = cd.Color;
}
}
最佳答案
不要在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()中编写代码。
关于c# - 颜色对话框未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26192926/