Foros del Web » Programación para mayores de 30 ;) » .NET »

no puedo ver la opacidad gradual

Estas en el tema de no puedo ver la opacidad gradual en el foro de .NET en Foros del Web. Saludos: Necesito ayuda por favor, miren trataré de exponer mi caso: Hice un control (panel) y le agregué la propiedad "opacity", funciona a mi voluntad ...
  #1 (permalink)  
Antiguo 21/10/2009, 19:03
Avatar de neo101  
Fecha de Ingreso: julio-2007
Mensajes: 73
Antigüedad: 16 años, 9 meses
Puntos: 1
Exclamación no puedo ver la opacidad gradual

Saludos:

Necesito ayuda por favor, miren trataré de exponer mi caso:

Hice un control (panel) y le agregué la propiedad "opacity", funciona a mi voluntad y todo, PEEEEROOOO el asunto es el siguiente, traté d establecer varios paneles en una ventana y aparecerlos/desaparecerlos en base a la seleccion de un menú de botones (toolstrip); este código tambien funciona, pero solo a la mitad!!! es decir, el panel a desaparecer; desaparece inmediatamente (y no gradualmente como se espera opere) y el que va a aparecer si hace su aparición de forma gradual...

Código vb:
Ver original
  1. Private Sub Alfrente(ByVal Ps As Integer)
  2.         If Ps = Fpanel Then Exit Sub
  3.         Select Case Fpanel
  4.             Case 0
  5.                 JbPanel1.Sh()
  6.                 JbPanel1.Visible = True
  7.             Case 1
  8.                 JbPanel1.Hy()
  9.                 JbPanel1.Visible = False
  10.             Case 2
  11.                 JbPanel2.Hy()
  12.                 JbPanel2.Visible = False
  13.             Case 3
  14.                 JbPanel3.Hy()
  15.                 JbPanel3.Visible = False
  16.         End Select
  17.         Select Case Ps
  18.             Case 1
  19.                 JbPanel1.Sh()
  20.                 JbPanel1.Visible = True
  21.             Case 2
  22.                 JbPanel2.Sh()
  23.                 JbPanel2.Visible = True
  24.             Case 3
  25.                 JbPanel3.Sh()
  26.                 JbPanel3.Visible = True
  27.         End Select
  28.         Fpanel = Ps
  29.     End Sub

El primer case desaparece el panel q esta al frente indicado por la variable fpanel y el segundo case aparece el panel solicitado x el usuario...

No se, habia pensado en retener el proceso hasta q terminara d desvanecerse el anterior, pues sé que es la instruccion
Código:
JbPanel1.visible = False
la que hace q primero desaparezca el panel de manera inmediata y ya sin verse, se aplique el desvanecimiento... pero no hallo como hacer esto...

Bueno, los dejo opinar... Gracias x su atención...
  #2 (permalink)  
Antiguo 22/10/2009, 02:08
 
Fecha de Ingreso: enero-2009
Mensajes: 35
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: no puedo ver la opacidad gradual

Supongo que el método Hy es uno propio que va bajando la opacidad hasta que desaparece, si esto es así lo que puedes hacer es poner el visible = false dentro de ese método y que lo haga cuando la opacidad sea 0.
  #3 (permalink)  
Antiguo 22/10/2009, 05:07
Avatar de neo101  
Fecha de Ingreso: julio-2007
Mensajes: 73
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: no puedo ver la opacidad gradual

Muchas Gracias x tu respuesta... Si, el método .Hy() (ó -Sh()) desvanecen o hacen aparecer con gradualidad el panel instanciado; lamento decirte que aunq ponga el .visible cuando haya terminado de opacarse, hace el mismo efecto... Como lo desvanezco a través de un timer, te muestro el evento tick:

Código vbnet:
Ver original
  1. Private Sub timer_tick(ByVal sender As Object, ByVal e As System.EventArgs)
  2.             If Estado < 0 Then
  3.                 If Me.Opacity = 0 Then
  4.                     timer.Stop()
  5.                     Me.Visible = False
  6.                     edo = False
  7.                 Else
  8.                     Me.Opacity -= Vel
  9.                 End If
  10.             End If
  11.             If Estado > 0 Then
  12.                 If Me.Opacity = 255 Then
  13.                     timer.Stop()
  14.                     Me.Visible = True
  15.                     edo = False
  16.                 Else
  17.                     Me.Opacity += Vel
  18.                 End If
  19.             End If
  20.             Me.Refresh()
  21.         End Sub

Me has dado la idea d probar con 2 timer... A todos, les cuento después... Gracias x su atención...
  #4 (permalink)  
Antiguo 23/10/2009, 20:08
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: no puedo ver la opacidad gradual

Efectivamente, como mencionas, el hecho de que uses la propiedad Visible para ocultarlo hace que se oculte inmediatamente.

Por otro lado, habría que ver, por ejemplo, de dónde sale la variable Estado, ya que es posible que la estés sobreescribiendo al aparecer el otro panel haciendo que el efecto no funcione.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 24/10/2009, 22:55
Avatar de neo101  
Fecha de Ingreso: julio-2007
Mensajes: 73
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: no puedo ver la opacidad gradual

Gracias por tu respuesta.

La variable estado, es un miembro privado d esta clase, en el supuesto; estoy entendiendo que esta se inicializa como nueva, modificando un poco el código, y aplicando mas timers, me sucede exactamente lo mismo; de entrada esta variable que declaré como entea queda en cero:

Código vb.net:
Ver original
  1. 'Sub New()
  2. Public Sub New()
  3.             MyBase.New()
  4.             SetStyle(ControlStyles.AllPaintingInWmPaint, True)
  5.             SetStyle(ControlStyles.UserPaint, True)
  6.             SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
  7.             Me.BackColor = Color.Transparent
  8.             x2 = 0
  9.             y2 = 0
  10.             ancho = Me.Width
  11.             alto = Me.Height
  12.             modecolor = 1
  13.             Color1 = Color.Black
  14.             Color2 = Color.White
  15.             Color3 = Color.Black
  16.             posiciones = New Single() {0, 0.2, 1.0}
  17.             Av = 255
  18.             Vel = 16
  19.             intervalo = 25
  20.             intervalo2 = 50
  21.             timer1 = New System.Windows.Forms.Timer
  22.             timer2 = New System.Windows.Forms.Timer
  23.             AddHandler timer1.Tick, AddressOf Me.timer1_tick
  24.             AddHandler timer2.Tick, AddressOf Me.timer2_tick
  25.             edo1 = 0
  26.             edo2 = 0
  27.         End Sub

Arbitrariamente le asigno un valor negativo si quiero desvanecer y un positivo para que aparezca de nuevo, y aunq ponga el .visible = x en algun lugar o despues de completar la opacida, no hay cambios!! Realiza este efecto sin poderme dar las opciones o efectos que necesito... CAbe mencionar que para no sobreescribir las cosas, use timers y variables x separado... Les dejo los códigos que inicializan los efectos y los tick's q usé... ya me quedé sin ideas, la vdd...

Código vb.net:
Ver original
  1. Public Sub Sh() 'aparece el panel...
  2.             While edo1 <> 0
  3.             End While
  4.             timer1.Interval = intervalo
  5.             edo1 = 1
  6.             timer1.Start()
  7.         End Sub
  8.  
  9.         Public Function ShowAllObjects() As Integer '.visible = TRUE a todos los objetos contenidos...
  10.             While edo2 <> 0
  11.             End While
  12.             timer2.Interval = intervalo2
  13.             edo2 = 1
  14.             idx = 0
  15.             timer2.Start()
  16.         End Function
  17.  
  18.         Public Sub Hy() 'desaparece el panel...
  19.             While edo1 <> 0
  20.             End While
  21.             timer1.Interval = intervalo
  22.             edo1 = -1
  23.             timer1.Start()
  24.         End Sub
  25.  
  26.         Public Function HideAllObjects() As Integer '.visible = false
  27.             While edo2 <> 0
  28.             End While
  29.             timer2.Interval = intervalo2
  30.             edo2 = -1
  31.             idx = 0
  32.             timer2.Start()
  33.         End Function
  34.  
  35.         Private Sub timer1_tick(ByVal sender As Object, ByVal e As System.EventArgs)
  36.             If edo1 < 0 Then
  37.                 If Me.Opacity = 0 Then
  38.                     timer1.Stop()
  39.                     edo1 = 0
  40.                 Else
  41.                     Me.Opacity -= Vel
  42.                 End If
  43.             End If
  44.             If edo1 > 0 Then
  45.                 If Me.Opacity = 255 Then
  46.                     timer1.Stop()
  47.                     edo1 = 0
  48.                 Else
  49.                     Me.Opacity += Vel
  50.                 End If
  51.             End If
  52.             Me.Refresh()
  53.         End Sub
  54.  
  55.         Private Sub timer2_tick(ByVal sender As Object, ByVal e As System.EventArgs)
  56.             If idx >= Me.Controls.Count Then
  57.                 timer2.Stop()
  58.                 edo2 = 0
  59.             End If
  60.             If edo2 > 0 Then 'showall
  61.                 Me.Controls(idx).Visible = True
  62.             End If
  63.             If edo2 < 0 Then        'hideall
  64.                 Me.Controls(idx).Visible = False
  65.             End If
  66.         End Sub

Gracias a todos x su atención...
  #6 (permalink)  
Antiguo 26/10/2009, 19:34
Avatar de neo101  
Fecha de Ingreso: julio-2007
Mensajes: 73
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: no puedo ver la opacidad gradual

A ver si este mensaje no me lo banean... ¬_¬

ya logré hacer el efecto que necesitaba, fué mas sencillo hacerlo a través de ciclos que disminuyeran la opacidad y / ó aparición o desaparición de controles cada X tiempo (el X tiempo es un retraso con la instrucción Thread.Sleep(intervalo_de_milisegundos)).

A partir de esto, lo que noto ahora es que derepente este proceso llega a tardarse con respecto a el contenido de controles adheridos (o agregados) al panel en cuestion... No se si me ecplique, pero entonces la nueva pregunta sería: ¿¿Si tengo más procesos en memoria o el programa consume ya recursos con otras ventanas, el proceso de opacidad/ocultación de controles ralentizará ó comprometerá el desempeño general del programa y o del equipo?

Escucho sus opiniones y muchas gracias a todos por tu atención...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:52.