none
al minimizar se borra el picturebox RRS feed

  • Pregunta

  • Hola que tal 

    Me pueden ayudar ?

    Tengo escrito lo siguiente dentro del picturebox1_click ,como puedo hacer para que cuando minimice la imagen no se borre al maximizar

    System.Drawing.Graphics graphicsObj;

    graphicsObj = pictureBox1.CreateGraphics();

    Pen myPen = new Pen(Color.Blue,2);

    graphicsObj.Drawline(myPen,new Point(v1,v2),new point (v3,v4));

    gracias por vuestra colaboracion

    Un saludo


    http://www.daselectrics.es

    jueves, 31 de enero de 2013 15:35

Respuestas

  • En el clic haces un picturebox1.Refresh()

    En el Paint(), no haces un CreateGraphics(), sino simplemente e.Graphics.DrawLine(...)

    Ahora, no tiene el menor sentido usar un picturebox de esta manera. Para dibujar sobre una ventana, lo haces sobre tu propia clase deivada de Control, y no cargas con la mochila de un control que realmente no usas.

    Para pintar en un picturebox, pintas en el picture del box

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            private Bitmap bm;
            private Random rnd;
    
            public Form1()
            {
                InitializeComponent();
                this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                rnd = new Random();
    
                pictureBox1.Image = bm;
            }
    
            private void pictureBox1_Click(object sender, EventArgs e)
            {
                Graphics g = Graphics.FromImage(bm);
    
                Pen myPen = new Pen(Color.Blue, 2);
    
                g.DrawLine(myPen, pictureBox1.PointToClient(Cursor.Position), new Point(rnd.Next(pictureBox1.Width), rnd.Next(pictureBox1.Height)));
     
    
                g.Dispose();
                pictureBox1.Refresh();
            }
        }
    }
    
    • Marcado como respuesta imasdpic jueves, 31 de enero de 2013 17:02
    jueves, 31 de enero de 2013 16:39

Todas las respuestas

  • hola

    es que deberias poner ese codigo en el evento Paint del PictureBox asi no se elimina

    sino se repinta la imagen esta claro que la perderas, no funciona si la pones en el evento click

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    jueves, 31 de enero de 2013 15:42
  • Hola Leandro

    Si meto ese codigo dentro del evento paint  cuando cliko el mouse ya no dibuja 

    tengo que llamar ala evento de alguna forma ?

    Gracias


    http://www.daselectrics.es

    jueves, 31 de enero de 2013 16:15
  • Muéstrenos su código completo del evento Paint.  Mi primera observación sería recordarle que durante el evento Paint usted recibe el objeto Graphics y NO debe crear uno para el control.

    Jose R. MCP
    Code Samples

    jueves, 31 de enero de 2013 16:33
    Moderador
  • Hola webJose

    en el evento paint solo habia probado loq ue me comentaba Leandro lo que tenia en PictureBox_clic 

    ponerlo en el evento paint ,aun no me se manejar bien en C#

    gracias


    http://www.daselectrics.es

    jueves, 31 de enero de 2013 16:38
  • En el clic haces un picturebox1.Refresh()

    En el Paint(), no haces un CreateGraphics(), sino simplemente e.Graphics.DrawLine(...)

    Ahora, no tiene el menor sentido usar un picturebox de esta manera. Para dibujar sobre una ventana, lo haces sobre tu propia clase deivada de Control, y no cargas con la mochila de un control que realmente no usas.

    Para pintar en un picturebox, pintas en el picture del box

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            private Bitmap bm;
            private Random rnd;
    
            public Form1()
            {
                InitializeComponent();
                this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                rnd = new Random();
    
                pictureBox1.Image = bm;
            }
    
            private void pictureBox1_Click(object sender, EventArgs e)
            {
                Graphics g = Graphics.FromImage(bm);
    
                Pen myPen = new Pen(Color.Blue, 2);
    
                g.DrawLine(myPen, pictureBox1.PointToClient(Cursor.Position), new Point(rnd.Next(pictureBox1.Width), rnd.Next(pictureBox1.Height)));
     
    
                g.Dispose();
                pictureBox1.Refresh();
            }
        }
    }
    
    • Marcado como respuesta imasdpic jueves, 31 de enero de 2013 17:02
    jueves, 31 de enero de 2013 16:39
  • Muchas gracias Walter Miguel 



    http://www.daselectrics.es

    jueves, 31 de enero de 2013 17:02
  • pero para que haces el

    Graphics g = Graphics.FromImage(bm);

    si tienes directo el

    Graphics g = e.Graphics;

    puede acceder directo al Graphics del picturebox no lo necesitas en una variable

    Control.Paint Event

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 31 de enero de 2013 17:24
  • Hola

    Una alternativa para hacer persistente la imagen en el pictureBox seria dibujar sobre un bitmap y asociar este al pictureBox. Algo así:

    Bitmap b=new Bitmap(pictureBox1.Width,pictureBox.Height);

    Graphic g=Graphics.fromImage(b);

    //dibujas usando "g" y luego lo asignas

    pictureBox1.Image=b;

    De esta forma la imagen es persistente.

    Saludos.


    • Editado Cruznick viernes, 1 de febrero de 2013 13:11
    viernes, 1 de febrero de 2013 13:11