문제

전화하려고 해요 패널1 주황색 선으로 패널을 다시 칠하는 페인트 메소드입니다(파란색 선으로 시작됨).

무효화(), 업데이트() 및 새로 고침()을 시도했지만 아무 것도 panel1의 페인트 이벤트를 호출하지 않는 것 같습니다...

페인트 이벤트 핸들러가 panel1에 추가되었습니다.

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();
    }
}
도움이 되었습니까?

해결책

Application.Run(testForm); 양식이 닫힐 때까지 차단되므로 drawNewLine() 호출됨 - 양식이 더 이상 존재하지 않습니다(클릭 시 이를 호출하는 버튼을 만들고 직접 확인하면 코드가 작동합니다). Invalidate() 잘 작동해야합니다.

또한, 폐기해서는 안 됩니다. Graphics 페인트 이벤트에서 코드에 전달되는 객체입니다.당신은 그것을 생성할 책임이 없으므로 그것을 생성한 코드가 그것을 파괴하도록 하십시오.

또한 폐기 Pen 객체를 생성하기 때문에 객체입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top