2010-07-05 5 views
2

J'ai un formulaire Windows avec un panneau avec plusieurs contrôles. Le panneau ne prend pas tout l'espace de formulaire, mais seulement une petite partie. Ce que je veux savoir, c'est s'il y a un moyen de récupérer l'affichage du panneau (avec tous les contrôles enfants) sous forme de bitmap. Comme une capture d'écran, mais seulement recadrée sur le panneau. Je ne regarde pas dans la capture d'écran parce que le panneau est dans le contrôle scrollable (contrôles DevX) donc parfois il ne peut pas être entièrement visible et j'ai besoin de sa représentation visuelle si visible ou non.Comment obtenir un panneau Windows Forms en tant que bitmap avec C#?

Est-ce possible?

Edit:

Eh bien, il semble maintenant que c'était que je craignais. La solution suggérée avec DrawToBitmap() dessine uniquement la partie du contrôle VISIBLE. J'ai utilisé DisplayRectangle pour récupérer la taille du contrôle complet. Le rectangle est correct, et maintenant le bitmap est la taille du contrôle complet, mais la partie du contrôle qui n'est PAS VISIBLE est TRANSPARENT sur le bitmap, n'affichant pas les contrôles qui sont sur la partie invisible du contrôle.

Y a-t-il une chance que cela soit rendu complètement?

+0

voir mon commentaire sur Hans answer. – serhio

Répondre

8

Bien sûr, utilisez simplement la méthode DrawToBitmap() du panneau. Il n'est pas fiable à 100%, il pourrait y avoir des contrôles sur le panneau qui ne le supporte pas. Comme RichTextBox, WebBrowser ou une sorte de contrôle ActiveX tiers.

private static Image PanelToBitmap(Control pnl) { 
     var bmp = new Bitmap(pnl.Width, pnl.Height); 
     pnl.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); 
     return bmp; 
    } 
+0

Oh, ma chère, comme je n'avais jamais remarqué cette méthode auparavant :(Je suppose qu'il n'y avait pas besoin de ... Merci beaucoup, je vais espérer que ça marchera pour tous les contrôles utilisés (principalement des boîtes d'édition, des cases à cocher, des groupes, etc.) Merci encore. –

+0

qui fonctionnera bien. –

+0

pour les formes nonscrolling il fonctionne parfaitement. Lorsque vous utilisez Scrollable contrôle (DevX) il est comme décrit dans mon édition. –

Questions connexes