Рисование на панели в конструкторе формы - PullRequest
2 голосов
/ 17 июля 2010

У меня есть следующий пример кода, который, как я ожидаю, закрасит панель в форме красным, как только она загрузится:

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 ]

4 голосов
/ 17 июля 2010

что здесь происходит?

Вы опережаете обычное стирание / рисование формы. Он рисуется, а затем стирается, когда отображаются формы (в первый раз).

Вы можете попробовать событие FormCreate (я не совсем уверен), но включение его в событие Shown, безусловно, должно работать.

Но имейте в виду, что результаты DrawStuff () исчезнут, когда вы свернете / восстановите или нажмете другие окна впереди.

Рассмотрите возможность использования флага состояния (DoDrawStuff ()) и выполняйте фактическое рисование в событии panel1_Paint.

1 голос
/ 20 июля 2010

Может быть проще создать собственную панель и переопределить OnPaint ...

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

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