C# Panel.Refresh() не вызывает метод рисования

Я пытаюсь вызвать метод рисования panel1, чтобы перекрасить панель оранжевой линией (она инициируется синей линией).

Я пробовал invalidate(), update() и refresh(), но, кажется, ничто не вызывает событие рисования panel1...

Обработчик события рисования был добавлен в панель1:

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

Может кто-нибудь, пожалуйста, помогите?

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();
    }
}

1 ответ

Решение

Application.Run(testForm); блоки, пока форма не закрыта, поэтому, когда drawNewLine() называется - форма больше не существует (создайте кнопку, которая вызывает ее по нажатию кнопки мыши, и проверьте себя, код работает). Invalidate() должно работать просто отлично.

Кроме того, вы не должны распоряжаться Graphics объект, который передается вашему коду в событии рисования. Вы не несете ответственности за его создание, поэтому позвольте коду, который его создал, уничтожить его.

Кроме того, распоряжаться Pen объекты, так как вы их создаете.

Другие вопросы по тегам