C#のPanel.Refresh()がペイントメソッドを呼び出さない
質問
電話しようとしています パネル1 ペイント メソッドを使用して、パネルをオレンジ色の線で再描画します (最初は青い線で始まります)。
validate()、update()、refresh()を試してみましたが、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