Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Zeroql en 13 Marzo 2016, 01:09 am



Título: dibujado de lineas C#
Publicado por: Zeroql en 13 Marzo 2016, 01:09 am
Hola
Estoy intentando dibujar lineas al cargar el formulario en c#, pero al compiliar no se muestras estas en el formulario. me pueden ayudar validando que estoy haciendo mal?

Gracias

este es el codigo que estoy utlizando,

Código
  1. private void frmUserOpt_Load(object sender, EventArgs e) {
  2.            //Dibujar las lineas
  3.            Pen oPen = new Pen(Color.Gainsboro, 3);
  4.            Graphics oPanel = this.CreateGraphics();
  5.            oPanel.DrawLine(oPen, 0, 50, this.Width, 50);
  6.            oPanel = pnlBackGround.CreateGraphics();
  7.            oPen.Color = Color.White;
  8.            oPanel.DrawLine(oPen, 0, 30, this.Width, 30);
  9.            oPanel.DrawLine(oPen, 0, 50, this.Width, 50);
  10.            oPen.Dispose();
  11.            oPanel.Dispose();
  12.        }


Título: Re: dibujado de lineas C#
Publicado por: El Benjo en 13 Marzo 2016, 06:07 am
Cualquier método que dibuje durante la carga del formulario será borrado ya que, cuando este se muestra, ocurre el evento Paint del mismo. Por ende todo lo que había sido dibujado se borra. Debes recordar que los gráficos no son persistentes y se borran cada que ocurre dicho evento. Si lo que quieres es que tus gráficos persistan debes de colocar tu código dentro del evento Paint.

Nota: Cuando dibujes en el evento Paint encontrarás que uno de los parámetros pasados a la función es del tipo PaintEventArgs o algo así. Tienes que utilizar el campo graphics de dicha variable para dibujar, de lo contrario tampoco se mostrará lo que dibujes.


Título: Re: dibujado de lineas C#
Publicado por: Zeroql en 13 Marzo 2016, 15:07 pm
Gracias El Benjo, no habia notado el evento onpaint.
Ya funciona de maravilla.


Título: Re: dibujado de lineas C#
Publicado por: Eleкtro en 19 Marzo 2016, 20:26 pm
Añado a lo que ha explicado el compañero @El Benjo:

Ten en cuenta para el futuro, que no todas las clases permiten usar el invocador (OnPaint) del evento Paint a tu antojo, en algunas clases, como por ejemplo la class TextBox, primeramente debes activar el dibujado de usuario, de la siguiente manera:

Código
  1. Public Class MyTextBox: Inherits TextBox
  2.  
  3.    Public Sub New()
  4.        Me.SetStyle(ControlStyles.UserPaint, value:=True)
  5.    End Sub
  6.  
  7.    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
  8.        MyBase.OnPaint(e)
  9.        ' ...
  10.    End Sub
  11.  
  12. End Class

C#:
Código
  1. public class MyTextBox : TextBox {
  2.  
  3. public MyTextBox() {
  4. this.SetStyle(ControlStyles.UserPaint, value: true);
  5. }
  6.  
  7. protected override void OnPaint(PaintEventArgs e) {
  8. base.OnPaint(e);
  9. // ...
  10. }
  11. }
  12.  
  13. //=======================================================
  14. //Service provided by Telerik (www.telerik.com)
  15. //=======================================================

Saludos.