Frage

Ich versuche anzurufen paneel1 malmethode, um das Bedienfeld mit einer orangefarbenen Linie neu zu streichen (es wird mit einer blauen Linie initiiert).

Ich habe versucht, invalidate(), update() und refresh() , aber nichts scheint das Paint-Ereignis von panel1 aufzurufen...

Der Paint-Ereignishandler wurde dem Panel1 hinzugefügt:

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

Kann mir bitte jemand helfen?

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();
    }
}
War es hilfreich?

Lösung

Application.Run(testForm); blockiert, bis das Formular geschlossen ist, also wann drawNewLine() heißt - Formular existiert nicht mehr (erstellen Sie eine Schaltfläche, die es beim Klicken aufruft und überprüfen Sie selbst, ob der Code funktioniert). Invalidate() sollte gut funktionieren.

Außerdem sollten Sie nicht entsorgen Graphics objekt, das im Malereignis an Ihren Code übergeben wird.Sie waren nicht dafür verantwortlich, es zu erstellen, also lassen Sie den Code, der es erstellt hat, es zerstören.

Auch entsorgen Pen objekte, seit Sie sie erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top