【问题标题】:How to call paint event from a button click event?如何从按钮单击事件中调用绘制事件?
【发布时间】:2015-01-05 06:00:12
【问题描述】:

我有一个带有“paint”事件的图片框,我也有代码来绘制图形。

如:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Graphics graphics = e.Graphics;
        graphics.DrawEllipse(Pens.Blue, 10, 10, 100, 100);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        pictureBox1.Invalidate();
    }
}

}

我的问题是。如何从 button_click 事件触发这些事件?我在网上搜索了很多,发现了很多类似“.invalidate()”或“.Refresh()”和“.Update”的遮阳篷。但我的任务告诉我,我需要使用 .Refresh() 方法来完成,并且绘画需要在图片框中。

我从 .Refresh() 方法中注意到的。是它擦除了图片框(绘制图片框是如何在初始化时创建的)。所以在按钮中触发 .Refresh 方法对我不起作用。

还有其他关于如何从按钮触发绘制事件的建议吗?

【问题讨论】:

  • 什么语言? java, c#?
  • 我做了一个 quik 例子。我说的是这个: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics graphics = e.Graphics; graphics.DrawEllipse(Pens.Blue, 10, 10, 100, 100); } private void button1_Click(object sender, EventArgs e) { pictureBox1.Invalidate(); } } }
  • 每次我启动应用程序时,都会自动绘制蓝色椭圆,此时按钮没有任何功能。还是我在这里看不清楚;p?
  • 您需要添加一个“状态”变量,这样当您按下按钮时,您会看到drawNow = true;,然后在 PictureBox 中检查该变量。或者,您绘制位图并在 PictureBox 中显示该位图。
  • 见@LarsTech 评论 - 它总是会画椭圆,除非你告诉它不要(反之亦然)

标签: c# winforms paint


【解决方案1】:

这应该可以解决问题:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        using (var g = Graphics.FromImage(pictureBox1.Image))
        {
            g.DrawEllipse(Pens.Blue, 10, 10, 100, 100);
            pictureBox1.Refresh();
        }
    }
}

【讨论】:

  • 请解释你的建议是做什么的。
  • 感谢您的回复。为我工作:)
  • 最好将您创建的图形对象处理掉,最好放在 using 块中。
  • 谢谢!我一直在寻找这个。我想知道如何how to get the drawing graphic on picture box in c#,但提供的答案毫无用处。这实际上解决了这个问题,因为图像是如何设置的。 pictureBox1.Image 会在此处正确获取绘制的图形。
猜你喜欢
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多