لا يمكن رسم القطع الناقص على تحميل النموذج في ج#

StackOverflow https://stackoverflow.com//questions/20011079

سؤال

أحاول رسم بعض القطع الناقص في بيكتوريبوكس الذي يحتوي على ينغ على فورملواد في ج#.عندما أقوم بتنفيذ الكود أدناه ، أرى علامات الحذف الخاصة بي لمدة نصف ثانية ، ثم لا أراها بعد الآن.

عندما كنت اضغط على بيكتوريبوكس بلدي ، وأنا قادرة على رسم القطع الناقص ومع ذلك ، عندما تصغير النموذج ، فإنها لا تظهر لا أكثر.

لقد قرأت أنه يجب أن لا تضع رمز الرسم الخاص بك في فورملواد ولكن بدلا من ذلك في طريقة أونبينت ، وهو ما فعلته.لا أعرف ماذا أحاول بعد الآن.يعطيكم الصّحة.(كن على علم بأنني تركت بعض التعليمات البرمجية علق لإظهار ما حاولت).

public partial class FormParterre : Form
{
    Graphics g;
    float circleSize = 15;
    //Brushes rouge = new Brushes (Brushes.Red);

    ReservationBilletSiegeDAO reservationBilletSiegeDAO = new ReservationBilletSiegeDAO();
    SiegeDAO siegeDAO = new SiegeDAO();

    List <Siege> sieges;
    List<ReservationBilletSiege> rbs;
    ReservationBillet reservationBillet = new ReservationBillet();
    ReservationBilletSiege reservationBilletSiege;

    SolidBrush semiTransBrush;


    public FormParterre()
    {
        InitializeComponent();
        pictureBox1.Image = new Bitmap("./parterre.png");
        g = pictureBox1.CreateGraphics();


    }

    public FormParterre(ReservationBillet rb)
    {
        reservationBillet = rb;
        pictureBox1.Image = new Bitmap("./parterre.png");
        g = pictureBox1.CreateGraphics();



        InitializeComponent();
    }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        // do nothing! prevents flicker
    }

    protected override void OnPaint(PaintEventArgs e)
    {

        sieges = siegeDAO.readAll();

        rbs = reservationBilletSiegeDAO.readAll();

        foreach (ReservationBilletSiege reservationBilletSiegeTMP in rbs)
        {
            Console.WriteLine(reservationBilletSiegeTMP.toString());
            int x = siegeDAO.read(reservationBilletSiegeTMP.idSiege).xValeur;
            int y = siegeDAO.read(reservationBilletSiegeTMP.idSiege).yValeur;
            float xx = (float)x;
            float yy = (float)y; 
            Console.WriteLine("le x: " + xx);
            Console.WriteLine("le y: " + yy);


              /*e.Graphics.FillRectangle(new SolidBrush(BackColor), e.ClipRectangle);*/
            g.FillEllipse(new SolidBrush(Color.FromArgb(128, 0, 0, 255)), xx - circleSize / 2, yy - circleSize / 2, circleSize,                                     circleSize);
        }

    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {  
        MouseEventArgs me = (MouseEventArgs)e;
        txtX.Text = me.X.ToString();
        txtY.Text = me.Y.ToString();

        Console.WriteLine("click"); 

        g.FillEllipse(new SolidBrush(Color.FromArgb(128, 0, 0, 255)), float.Parse(txtX.Text) - circleSize / 2, float.Parse(txtY.Text) - circleSize / 2, circleSize, circleSize);





    }

    private void FormParterre_Shown(object sender, EventArgs e)
    {

    }

    private void FormParterre_Load(object sender, EventArgs e)
    {

        /*sieges = siegeDAO.readAll();
        //semiTransBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));



        rbs = reservationBilletSiegeDAO.readAll();

        foreach (ReservationBilletSiege reservationBilletSiegeTMP in rbs)
        {
            Console.WriteLine(reservationBilletSiegeTMP.toString());
            int x = siegeDAO.read(reservationBilletSiegeTMP.idSiege).xValeur;
            int y = siegeDAO.read(reservationBilletSiegeTMP.idSiege).yValeur;
            float xx = (float)x;
            float yy = (float)y; 
            Console.WriteLine("le x: " + xx);
            Console.WriteLine("le y: " + yy);

            g.FillEllipse(new SolidBrush(Color.FromArgb(128, 0, 0, 255)), xx - circleSize / 2, yy - circleSize / 2, circleSize, circleSize);
        }*/
    }


}
هل كانت مفيدة؟

المحلول

تحتاج إلى الطلاء في OnPaint طريقة استخدام PaintEventArgs.Graphics الملكية التي يتم تمريرها لك.إذا كنت تريد أن ترسم على PictureBox يمكنك محاولة الاشتراك في Paint الحدث والرسم هناك.

هذا يعمل بالنسبة لي:

public void Form1()
{
    InitializeComponent();

    pictureBox1.Paint += pictureBox1_Paint;
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.FillEllipse(Brushes.Red, pictureBox1.ClientRectangle);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top