【问题标题】:The graph of panel will go after the form is minimized, C#面板的图形将在窗体最小化后出现,C#
【发布时间】:2014-09-13 01:48:40
【问题描述】:

我的表单中有一个名为 Pan_Paint 的面板,我的代码如下:

Graphics graph = Pan_Paint.CreateGraphics();
graph.FillEllipse(new SolidBrush(Blue), 10, 10, 100, 100);

当我最小化表单时,当我恢复它时,该行将消失。或者当我按下 Tab 按钮时,也会发生同样的事情。我能做些什么来解决这个问题?谢谢。

【问题讨论】:

  • 我不想再画了我只想知道有没有其他方法。我的程序不仅仅是上面的代码,它里面有很多形状,所以我不能再画了。
  • 您需要阅读绘图管道...您可以通过多种方式与窗口进行交互,其中一些会强制窗口自行重绘,而无需了解这个额外的椭圆。因此,重申 Sneftel 所说的话,再画一遍 - 适当

标签: c# graphics panel


【解决方案1】:

这是基本的。

您要么需要在某些数据结构中缓存所有绘图,然后在Paint 事件中绘制它们。一次又一次,每当windows需要恢复屏幕时。

每当您将一些绘图动作添加到绘图队列时,您最初都会通过执行Panel.Invalidate() 来调用 Paint 事件。

除此之外别无他法:

将它们绘制到PictureBox图像中(不仅仅是在PictureBox上!)..

下面是正确使用 PictureBox 的代码以及如何做错:

  // this will change the Image of a PictureBox, assuming it has one.
  // These changes are persistent:

    using (Graphics G = Graphics.FromImage(pictureBox1.Image))
    {
        G.DrawEllipse(Pens.Red, new Rectangle(0, 0, 444, 444));
        pictureBox1.Invalidate();
    }

  // This is the wrong, non-persistent way to paint, no matter which control: 
  //The changes go away whenever the Window is invalidated:

    using (Graphics G = pictureBox2.CreateGraphics() )
    {
        G.DrawEllipse(Pens.Green, new Rectangle(0, 0, 444, 444));
    }

而是创建一个绘图动作类并在 Paint 事件中循环遍历它们的列表!

【讨论】:

  • 这适用于 OP。所以:你正在画一个你也想滚动的面板?为此,您必须添加正确的坐标。 See here - 如果你不能让它工作,你需要问你自己的问题..
  • 我投了赞成票,你说得对,我没有提到面板。
猜你喜欢
  • 1970-01-01
  • 2019-08-12
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多