Voici une méthode grossière qui va vous aider à démarrer:
public Panel CreateFloatingPanel(Panel originalPanel)
{
Bitmap bmp = new Bitmap(originalPanel.Width,
originalPanel.Height);
Rectangle rect = new Rectangle(0, 0,
bmp.Width, bmp.Height);
originalPanel.DrawToBitmap(bmp, rect);
foreach (Control ctrl in originalPanel.Controls)
{
ctrl.Visible = false;
}
using (Graphics g = Graphics.FromHwnd(originalPanel.Handle))
{
g.DrawImage(bmp, 0, 0);
bmp.Dispose();
SolidBrush brush =
new SolidBrush(Color.FromArgb(128, Color.Gray));
g.FillRectangle(brush, rect);
brush.Dispose();
}
Panel floater = new Panel();
floater.Size = originalPanel.Size;
floater.Left = originalPanel.Left - 50;
floater.Top = originalPanel.Top - 50;
this.Controls.Add(floater);
floater.BringToFront();
return floater;
}
Cette méthode prend un panneau avec des contrôles sur elle, tire le panneau avec tous ses contrôles sur un bitmap temporaire, fait tous les contrôles invisibles, dessine le bitmap temporaire sur le panneau, puis ajoute un calque gris semi-transparent sur le panneau. La méthode crée ensuite un nouveau panneau et le fait flotter sur le panneau d'origine, au-dessus et vers la gauche, puis le renvoie. Cela fait essentiellement du nouveau panneau une sorte de fenêtre contextuelle modale, un peu comme les pages Web le font parfois.
Pour utiliser sur votre formulaire, mettez toutes les commandes que vous voulez être grisés sous sur un panneau, alors l'événement Click de votre bouton faire quelque chose comme ceci:
Panel floater = CreateFloatingPanel(panel1);
floater.BackColor = Color.White;
ListView lv = new ListView();
floater.Controls.Add(lv);
Pour annuler l'effet, vous devez simplement supprimer le panneau flottant de la collection Controls du formulaire, puis rendre visible à nouveau tous les contrôles du panneau d'origine, puis Actualiser ou Invalider le panneau pour supprimer les éléments grisés. Le simple Invalidate fonctionnera parce que l'effet grisé ne persiste pas - pour que vous deviez rendre cela un peu plus compliqué. Mais cela devrait vous aider à démarrer, au moins.
Pas besoin de l'avoir à l'arrière, puis de l'amener à l'avant ... il suffit de basculer sa visibilité. – JustLoren
Pas vraiment ce que je veux ... :( –