C# Panel.Refresh()가 페인트 메서드를 호출하지 않습니다.
문제
전화하려고 해요 패널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
객체를 생성하기 때문에 객체입니다.
제휴하지 않습니다 StackOverflow