سؤال

أحاول الاتصال لوحة1 طريقة الطلاء لإعادة طلاء اللوحة بخط برتقالي (تبدأ بخط أزرق).

لقد حاولت إبطال () وتحديث () وتحديث ()، ولكن يبدو أنه لا يوجد شيء يستدعي حدث الطلاء الخاص باللوحة 1 ...

تمت إضافة معالج حدث الطلاء إلى اللوحة 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();
    }
}
هل كانت مفيدة؟

المحلول

Application.Run(testForm); كتل حتى يتم إغلاق النموذج، لذلك متى drawNewLine() تم استدعاؤه - النموذج لم يعد موجودًا (أنشئ زرًا يستدعيه عند النقر وتأكد بنفسك من أن الكود يعمل). Invalidate() يجب أن تعمل على ما يرام.

أيضا، لا ينبغي التخلص منها Graphics الكائن الذي يتم تمريره إلى التعليمات البرمجية الخاصة بك في حدث الطلاء.لم تكن مسؤولاً عن إنشائه، لذا دع الكود الذي أنشأه يدمره.

أيضا، التخلص Pen الكائنات منذ أن تقوم بإنشائها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top