我有一个表单,使用Paint
上的Panel
事件显示一组图片,该事件停靠在TabPage
的特定TabControl
内。
问题如下:
当用户切换到其他TabPage
,然后决定返回最初显示图形的TabPage
时,默认情况下这些图形无效,因此Panel
显示为空白
我希望这些图形在不同的TabPages之间切换时保持不变并完全独立于用户的操作。
一个要求:
由于图形很复杂并且需要一些时间才能被计算机绘制,我不想重复调用Paint
事件,每次重新绘制图形。相反,我只需要避免图形的默认失效。
我已阅读this other question,这可能有助于解决我的问题,但这超出了我的知识范围。
答案 0 :(得分:0)
如果要缓存图形,可以将所有内容绘制到位图中,并将其设置为面板的背景图像。
以下是使用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
的{{1}}事件是你需要调用它的一个很好的例子!
来自用户的数据变化显而易见的另一个原因来调用它。