質問

電話しようとしています パネル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 オブジェクトを作成しているときから、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top