在窗体的构造函数中绘制面板

时间:2010-07-16 21:26:37

标签: c# winforms gdi+ panel

我有以下示例代码,我希望在加载后立即为红色表单上的面板着色:

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

        drawstuff();
    }

    public void drawstuff()
    {
        using (Graphics g = panel1.CreateGraphics())
        {
            g.Clear(Color.Red);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        drawstuff();
    }
}

但是,由于某种原因,当我从构造函数中调用drawstuff()函数时,它不会在面板上绘制。当我按下按钮拨打drawstuff()时,它可以正常工作。

有谁可以解释这里发生的事情?

2 个答案:

答案 0 :(得分:4)

  

这里发生了什么?

你领先于表格的正常擦除/绘画。当表格显示时(第一次),它被绘制然后被删除。

您可以尝试使用FormCreate事件(我不完全确定),但将其置于Shown事件中肯定会有效。

但请注意,当您最小化/恢复或单击前面的其他窗口时,DrawStuff()的结果将消失。

考虑使用状态标志(DoDrawStuff())并在panel1_Paint事件中进行实际绘制。

答案 1 :(得分:1)

可能更容易创建自己的自定义面板并覆盖OnPaint ...

public class MyCustomPanel : Panel
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        e.Graphics.Clear(Color.Red);
    }
}