为什么在面板上绘制的文字会消失?

Iva*_*nov 5 c# winforms

我正在尝试在面板上绘制文本(面板有背景图片).

它工作得很好,但是当我最小化然后最大化应用程序时,文本就消失了.

我的代码:

using (Graphics gfx = Panel1.CreateGraphics())
{
    gfx.DrawString("a", new Font("Tahoma", 5), Brushes.White, new PointF(1, 1));
}
Run Code Online (Sandbox Code Playgroud)

如何保持静态,以免丢失?

BFr*_*ree 9

继承自Panel,添加一个表示您需要编写的文本的属性,并覆盖OnPaintMethod():

public class MyPanel : Panel
{
    public string TextToRender
    {
        get;
        set;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        e.Graphics.DrawString(this.TextToRender, new Font("Tahoma", 5), Brushes.White, new PointF(1, 1));
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,每个Panel都会知道它需要渲染什么,并且知道如何绘制自己.


Guf*_*ffa 2

如果您不使用Paint事件,您只是在控件所在的屏幕上进行绘制。控件不知道这一点,因此它不知道您打算让文本留在那里......

如果将要在面板上绘制的值放入其Tag属性中,则可以对所有面板使用相同的绘制事件处理程序。

另外,您需要正确处理 Font 对象,否则在将资源返回给系统之前,您将有很多对象等待完成。

private void panel1_Paint(object sender, PaintEventArgs e) {
   Control c = sender as Control;
   using (Font f = new Font("Tahoma", 5)) {
      e.Graphics.DrawString(c.Tag.ToString(), f, Brushes.White, new PointF(1, 1));
   }
}
Run Code Online (Sandbox Code Playgroud)