c# - 颜色对话框未显示

标签 c# winforms

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

相关文章:

javascript - 如何检查 TempData Razor MVC 中编写的 js 代码中的 null 值

winforms - FSharpChart 与 Windows.Forms 在很多方面都非常慢

c# - 我的 WinForm 正在获取 SQL 注入(inject)

.net - 哪些编程实践会影响窗口句柄的数量?

c# - 字符串替换c#为地址缩写

c# - 如何在带有单声道的 Linux 中使用 NLog?

c# - 从 UserControl 传回信息

c# - 无法访问已处置的对象错误

c# - WPF DataGrid 的单元格颜色恢复为默认值

c# - 如何从路径中获取文件名?