Pergunta

estou tentando ligar painel1 método paint para repintar o painel com uma linha laranja (é iniciado com uma linha azul).

Eu tentei invalidate(), update() e refresh(), mas nada parece chamar o evento paint do painel1...

O manipulador de eventos paint foi adicionado ao panel1:

this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);

Alguém pode ajudar?

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Form1 testForm = new Form1();
        Application.Run(testForm);

        testForm.drawNewLine();
    }
}

public partial class Form1 : Form
{
    bool blueLine = true;
    bool orangeLine = false;

    public Form1()
    {
        InitializeComponent();
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;

        if (blueLine == true)
        {
            Pen bluePen = new Pen(Color.Blue, 3);
            g.DrawLine(bluePen, 30, 50, 30, 250);
        }
        else if (orangeLine == true)
        {
            Pen orangePen = new Pen(Color.Orange, 3);
            g.DrawLine(orangePen, 30, 50, 30, 250);
        }

        g.Dispose();
    }

    public void drawNewLine()
    {
        blueLine = false;
        orangeLine = true;
        //panel1.Invalidate();
        //panel1.Update();
        panel1.Refresh();
    }
}
Foi útil?

Solução

Application.Run(testForm); blocos até que o formulário seja fechado, então quando drawNewLine() é chamado - o formulário não existe mais (crie um botão que o chame ao clicar e verifique você mesmo se o código está funcionando). Invalidate() deve funcionar bem.

Além disso, você não deve descartar Graphics objeto que é passado para o seu código no evento paint.Você não foi responsável por criá-lo, então deixe o código que o criou destruí-lo.

Além disso, descarte Pen objetos desde que você os está criando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top