Uso de ZOrder

¿Cómo funciona la propiedad ZOrder en formularios que no son MDI?
La tengo puesta para que me muestre un formulario superpuesto encima de otro, pero no funciona.
¿Hay qué hacer algo después de usar ZOrder? ¿Algún Refresh de los forms?

1 respuesta

Respuesta
1
Para poner un formulario Form1 visiblemente antes que otro bastará con que pongas:
Form1. ZOrder 0
Ahora bien, en cuanto pinches en el segundo formulario, este cogerá el foco y pasará al primer plano, quedando Form1 detrás del segundo formulario.
Si lo que quieres es que uno de los formularios esté "siempre visible" tendrás que recurrir a las API.
Te pongo un trozo de código de ejemplo, en un formulario pon un checkbox llamado chkVisible y pega el siguiente código:
' Indicadores de SetWindowPos
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOZORDER = &H4
Const SWP_NOREDRAW = &H8
Const SWP_NOACTIVATE = &H10
Const SWP_FRAMECHANGED = &H20
Const SWP_SHOWWINDOW = &H40
Const SWP_HIDEWINDOW = &H80
Const SWP_NOCOPYBITS = &H100
Const SWP_NOOWNERZORDER = &H200
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Sub chkVisible_Click()
If chkVisible.Value = vbChecked Then
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
Else
SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
End If
End Sub
Si marcas el check, ningún formulario tapará esta ventana, ni siquiera tras perder el foco.
Espero que te sirva de ayuda. No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas