颜色对话框没有显示

时间:2014-10-04 12:41:14

标签: c# winforms

我有一个小应用程序,看起来非常像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;
                }

    }

1 个答案:

答案 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()中编写代码。