none
Pintar rectángulo en celda de Datagridview RRS feed

  • Pregunta

  • Hola a toda la comunidad de foros MSDN:

    Necesito pintar un rectángulo dentro de una determinada celda de un DataGriView,  y, que cuando se abandone esa celda, el rectángulo desaparezca, quedando la celda como en su estado anterior


    De antemano les agradezco a todos por sus respuestas.

    Muchas gracias.


    sábado, 10 de febrero de 2018 2:18

Respuestas

  • El cambio de estilo debes hacerlo en el evento "EditingControlShowing". Aquí va un ejemplo

     private void Grilla_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
          DataGridViewCellStyle estilo = e.CellStyle;
    
            estilo.Font = new Font(estilo.Font.FontFamily,14,FontStyle.Bold); //Cambio la fuente
            estilo.BackColor = Color.GreenYellow;  //cambio el color de fondo
        }

    sábado, 10 de febrero de 2018 12:08
  • Cunado declaras el rectangulo con esta declaracion: 

    Rectangle newRect = new Rectangle(bounds.X, bounds.Y, bounds.Width - 4, bounds.Height - 2);

    Lo estas referenciando con una variable local al evento, por lo tanto desde otras partes del código no podrás hacer referencia a él. Intentá declarando el rectangulo fuera del evento, por ejemplo si lo estás haciendo dentro del evento "Grilla_CellEnter" 

     Rectangle newRect;
        private void Grilla_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
          newRect = new Rectangle(bounds.X, bounds.Y, bounds.Width - 4, bounds.Height - 2);
          g.DrawRectangle(Pens.Blue, newRect);
    
        }

    De esta manera, desde cualquier procedimiento dentro de la clase tendrás visible la variable "newRect"

    "Lo que realmente necesito es ver como borro el rectangulo que creé en esa celda, cuando cambio de celda"

    No necesitas borrar el rectángulo, lo que necesitás es ubicarlo en la nueva celda. Supongo que esa ubicación podrás obtenerlas (asi como obtubiste bounds.x, bounds.y, etc). O quizas puedas usar el método "Offset" para desplazarlo a la nueva ubicación.

    sábado, 10 de febrero de 2018 23:25

Todas las respuestas

  • El cambio de estilo debes hacerlo en el evento "EditingControlShowing". Aquí va un ejemplo

     private void Grilla_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
          DataGridViewCellStyle estilo = e.CellStyle;
    
            estilo.Font = new Font(estilo.Font.FontFamily,14,FontStyle.Bold); //Cambio la fuente
            estilo.BackColor = Color.GreenYellow;  //cambio el color de fondo
        }

    sábado, 10 de febrero de 2018 12:08
  • Gracias por responder AntiWork, pero tal vez no me has entendido, lo que necesito es dibujar un rectangulo, pero solo sus bordes, es decir,las lineas sin color dentro de el,  adentro de la celda.

    Tengo este Codigo, pero, al cambiar de celda, queda dibujado el rectangulo aún asi.

      Rectangle newRect = new Rectangle(bounds.X,
      bounds.Y, bounds.Width - 4,
      bounds.Height - 2);
      Draw the inset highlight box.
      g.DrawRectangle(Pens.Blue, newRect);

    Este codigo me lo dibuja bien, pero, al cambiar de celda, trato de borrar el rectangulo con varias formas, pero hasta ahora no he podido.

    Lo que realmente necesito es ver como borro el rectangulo que creé en esa celda, cuando cambio de celda

     Gracias por el interes y sigo esperando sus respuestas
    sábado, 10 de febrero de 2018 17:36
  • Cunado declaras el rectangulo con esta declaracion: 

    Rectangle newRect = new Rectangle(bounds.X, bounds.Y, bounds.Width - 4, bounds.Height - 2);

    Lo estas referenciando con una variable local al evento, por lo tanto desde otras partes del código no podrás hacer referencia a él. Intentá declarando el rectangulo fuera del evento, por ejemplo si lo estás haciendo dentro del evento "Grilla_CellEnter" 

     Rectangle newRect;
        private void Grilla_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
          newRect = new Rectangle(bounds.X, bounds.Y, bounds.Width - 4, bounds.Height - 2);
          g.DrawRectangle(Pens.Blue, newRect);
    
        }

    De esta manera, desde cualquier procedimiento dentro de la clase tendrás visible la variable "newRect"

    "Lo que realmente necesito es ver como borro el rectangulo que creé en esa celda, cuando cambio de celda"

    No necesitas borrar el rectángulo, lo que necesitás es ubicarlo en la nueva celda. Supongo que esa ubicación podrás obtenerlas (asi como obtubiste bounds.x, bounds.y, etc). O quizas puedas usar el método "Offset" para desplazarlo a la nueva ubicación.

    sábado, 10 de febrero de 2018 23:25
  • Cuando funcione, por favor mostranos el código completo así aprendemos todos.

    gracias

    sábado, 10 de febrero de 2018 23:28
  • Ok Gracias por volver a contestar

    No funciona.

    Porque el evento CellEnter tiene DataGridViewCellEventArgs y el Evento CellPainting tiene a DataGridViewCellPaintingEventArgs, lo cual dio error cuando puse la sentencia

    g.DrawRectangle(Pens.Blue, newRect);

    Igualmente, trate de llamar al evento CellPainting con 

    customDataGridView1_CellPainting(sender,e); 

    pero igualmente la "e" da el mismo problema de incompatibillidad

    Si tienes otra sugerencia te lo agradezco

    Gracias

    domingo, 11 de febrero de 2018 4:17