【问题标题】:Color Dialog box not showing up颜色对话框不显示
【发布时间】:2014-10-04 20:59:57
【问题描述】:

我有一个看起来很像 Windows 中的旧画图的小应用程序。我使用图片框 Paint 事件实现了所有的 Graphic。唯一的问题是,当我单击此按钮时,会出现一个颜色对话框,让我更改笔的颜色。但是每当我单击按钮时,该框永远不会出现,并且我的程序卡在 Paint 事件中,最准确地说是在我执行以下操作的那一行:

pictureBox1.Image = bmp; 

我做错了什么?拜托,我将不胜感激!

我希望下面的代码 sn -p 就足够了。

这是我的图片框绘制事件:

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.Image = bmp; 调用 pictureBox1_Paint,一个无休止的循环。

标签: c# winforms


【解决方案1】:

不要在 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() 中编写代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多