Question

j'essaie d'appeler panneau1 méthode paint pour repeindre le panneau avec un trait orange (il est initié par un trait bleu).

J'ai essayé invalidate(), update() et rafraîchir(), mais rien ne semble appeler l'événement paint de panel1...

Le gestionnaire d'événements paint a été ajouté au panel1 :

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

Quelqu'un peut-il aider s'il vous plaît ?

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();
    }
}
Était-ce utile?

La solution

Application.Run(testForm); bloque jusqu'à ce que le formulaire soit fermé, donc quand drawNewLine() est appelé - le formulaire n'existe plus (créez un bouton qui l'appelle au clic et vérifiez vous-même, le code fonctionne). Invalidate() devrait fonctionner très bien.

De plus, vous ne devez pas jeter Graphics objet qui est transmis à votre code lors de l'événement paint.Vous n’êtes pas responsable de sa création, alors laissez le code qui l’a créé le détruire.

Jetez également Pen objets puisque vous les créez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top