Estoy haciendo una aplicación de windows en c# en la que necesito que cuando se abra una ventana de dialogo, aparezca un panel con semi-transparencia entre la ventana de dialogo y la ventana padre, igual que lo hacen muchos frameworks js para de la web.
El problema que tengo es que el panel se dibuja en frente de los controles hijos, pero NO en frente de los hijos de estos controles.
La interfaz que por ahora estoy manejando es muy simple: tengo un panel que contiene un menu. Este menu tiene botones (sus controles hijos).
Uno de estos botones es el que abre la ventana dialogo. Cuando esto pasa el panel queda entre el menu y los botones del menu, es decir, oculta el fondo del menu, pero los botones siguen apareciendo por encima del panel.
Las clases relevantes son las siguientes:
PopupBackScreen.cs
Código C#:
Ver original
public class PopupBackScreen : Panel { private SolidBrush backBrush; public PopupBackScreen() { backBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 0)); } protected override CreateParams CreateParams { get { System.Windows.Forms.CreateParams createParams = base.CreateParams; createParams.ExStyle |= 0x20; return createParams; } } protected override void OnPaint(PaintEventArgs e) { e.Graphics.FillRectangle(backBrush, this.ClientRectangle); } }
ScreenManager.cs
Código C#:
Ver original
... public ScreenParams Popup(Popups.PopupType popup) { if (!popups.ContainsKey(popup)) { popups.Add(popup, Popups.CreateInstance(popup)); } currentScreen.Controls.Add(popupBackScreen); popupBackScreen.Dock = DockStyle.Fill; popupBackScreen.BringToFront(); currentScreen.PerformLayout(); UI.Popup wnd = popups[popup]; wnd.ShowDialog(); currentScreen.Controls.Remove(popupBackScreen); return wnd.Config; } ...
Como verán, agrego el control a la pantalla que está activa en ese momento (currentScreen no es más que un panel para agrupar controles, en este caso es el panel que contiene el menu). Luego ajusto al ancho de la pantalla el popupBackScreen y lo muestro delante de todo (aunque esto último es lo que no está funcionando).
Entonces, ¿cómo hago para que el panel se muestre realmente en frente de todo?.
Muchas gracias.
Saludos y felicidades en estas fiestas.