TabPage 更改时保持图形不变

Keeping graphics unaltered when TabPage changes

我有一个表单,它使用停靠在 TabControl 的特定 TabPage 中的 Panel 上的 Paint 事件显示一组图形。 =19=]

问题如下:

当用户切换到另一个 TabPage 然后决定返回到最初显示图形的 TabPage 时,这些图形默认无效,因此 Panel显示为空白。

我希望这些图形在不同的 TabPage 之间切换时保持不变并且完全独立于用户的操作。

一个要求:

由于图形比较复杂,用电脑绘制需要一些时间,不想每次都重画图形调用Paint事件反复。相反,我只需要避免图形的默认失效。

我已阅读 this other question 这可能有助于解决我的问题,但它超出了我的知识范围。

如果您想缓存图形,可以将所有内容绘制到位图中并将其设置为面板的背景图像。

这里是一些示例代码,使用 Control。只需传递您的 Panel:

void drawInto(Control ctl)
{
    Bitmap bmp = new Bitmap(ctl.ClientSize.Width, ctl.ClientSize.Height);

    using ( Graphics G = Graphics.FromImage(bmp))
    {
        // all your drawing code goes here..!
        G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        G.DrawEllipse(Pens.DimGray, ctl.ClientRectangle);
        // ..
        // ..
    }
    ctl.BackgroundImage = bmp;
}

只需确保在必要时调用绘图函数,因为现在这是你的责任。Resize事件Panel 的一个很好的例子说明了您需要在哪里调用它!

来自用户的数据变化是调用它的另一个明显原因..