PictureBox PaintEvent con altro metodo

C’è una sola picturebox nella mia forma e voglio disegnare con un metodo su questa picturebox ma non posso farlo e non funziona. Il metodo è:

private Bitmap Circle() { Bitmap bmp; Graphics gfx; SolidBrush firca_dis=new SolidBrush(Color.FromArgb(192,0,192)); bmp = new Bitmap(40, 40); gfx = Graphics.FromImage(bmp); gfx.FillRectangle(firca_dis, 0, 0, 40, 40); return bmp; } 

Picturebox

  private void pictureBox2_Paint(object sender, PaintEventArgs e) { Graphics gfx= Graphics.FromImage(Circle()); gfx=e.Graphics; } 

    Devi decidere cosa vuoi fare:

    • Disegna nell’immagine o
    • attingere al controllo ?!

    Il tuo codice è un mix di entrambi, motivo per cui non funziona ..!

    Ecco come attingere al Control :

     private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawEllipse(Pens.Red, new Rectangle(3, 4, 44, 44)); .. } 

    Ecco come disegnare nell’immagine di PictureBox ::

     void drawIntoImage() { using (Graphics G = Graphics.FromImage(pictureBox1.Image)) { G.DrawEllipse(Pens.Orange, new Rectangle(13, 14, 44, 44)); .. } // when donw with all drawing you can enforce the display update by calling: pictureBox1.Refresh(); } 

    Entrambi i modi per disegnare sono persistenti. Quest’ultimo cambia in pixel dell’immagine, il primo no.

    Quindi, se i pixel sono disegnati nell’immagine e si ingrandisce, si allunga o si sposta l’immagine, il pixel si abbina a esso. I pixel disegnati sulla parte superiore del controllo PictureBox non lo faranno!

    Ovviamente per entrambi i modi di disegnare, è ansible modificare tutte le parti usuali come il comando di disegno, magari aggiungere un FillEllipse prima del DrawEllipse , delle Pens e dei Brushes con il loro tipo di pennello e Colors e le dimensioni ..

     private static void DrawCircle(Graphics gfx) { SolidBrush firca_dis = new SolidBrush(Color.FromArgb(192, 0, 192)); Rectangle rec = new Rectangle(0, 0, 40, 40); //Size and location of the Circle gfx.FillEllipse(firca_dis, rec); //Draw a Circle and fill it gfx.DrawEllipse(new Pen(firca_dis), rec); //draw a the border of the cicle your choice }