J'ai récupéré une Function sur internet qui permet de sauvegarder le contenu d'un Form (à partir de la librairie GDI32.DLL).
Dans mon appli, j'ai plusieurs Form dans lesquels j'ai implanté un menu flottant qui appel cette Function.
Alors que ces Form ont des couleurs spécifiques, je veux que lors de la sauvegarde, certains controles soient en Backcolor "Blanc" et que les boutons ne soient pas visibles.
Dans le code ci-après, les boutons sont gérés comme je veux, les labels aussi, mais j'ai un problème avec les cellules de mes DGV.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
   Private Function GetFormImage(ByRef MonForm As Form) As Bitmap
 
 
        ' Mémorisation des boutons actifs et des couleurs de fond de plan
        Dim MesBoutonsVisibles As New List(Of String)
        Dim MesControlsCouleur As New Dictionary(Of String, Color)
        For Each Contr As Control In MonForm.Controls
            If TypeOf Contr Is Button And Contr.Visible = True Then
                MesBoutonsVisibles.Add(Contr.Name)
                ' on rend le bouton invisible après l'avoir mémorisé
                Contr.Visible = False
            End If
            Select Case True
                ' on rend la couleur blanche après l'avoir mémorisée
                Case TypeOf Contr Is Label
                    MesControlsCouleur.Add(Contr.Name, Contr.BackColor)
                    Contr.BackColor = Color.White
                Case TypeOf Contr Is DataGridView
                   ?????????
 
            End Select
        Next
        Dim MaCouleur As Color = MonForm.BackColor
        MonForm.BackColor = Color.White
 
        ' On force le "redessin" du formulaire pour supprimer d'éventuelles traces du menu flottant
        MonForm.Refresh()
 
        ' Récupère l'image du formulaire
        Dim me_gr As Graphics = MonForm.CreateGraphics
 
        ' Make a Bitmap to hold the image.
        Dim bm As New Bitmap(MonForm.ClientSize.Width, MonForm.ClientSize.Height, me_gr)
        Dim bm_gr As Graphics = Graphics.FromImage(bm)
        Dim bm_hdc As IntPtr = bm_gr.GetHdc
 
        ' Get the form's hDC. We must do this after 
        ' creating the new Bitmap, which uses me_gr.
        Dim me_hdc As IntPtr = me_gr.GetHdc
 
        ' BitBlt the form's image onto the Bitmap.
        BitBlt(bm_hdc, 0, 0, MonForm.ClientSize.Width, MonForm.ClientSize.Height, me_hdc, 0, 0, SRCCOPY)
        me_gr.ReleaseHdc(me_hdc)
        bm_gr.ReleaseHdc(bm_hdc)
 
        ' remise en conformité des boutons et fond de plans
        For Each Nom As String In MesBoutonsVisibles
            MonForm.Controls(Nom).Visible = True
        Next
        For Each Contr As Control In MonForm.Controls
            Select Case True
                Case TypeOf Contr Is Label
                    Contr.BackColor = MesControlsCouleur(Contr.Name)
 
            End Select
        Next
        MonForm.BackColor = MaCouleur
        MonForm.Refresh()
 
        ' Return the result.
        Return bm
 
    End Function
Là ou j'ai mis les ???????, je ne sais pas comment faire pour dire quelque chose du genre:
MesControlsCouleur.Add(Contr.Name, Contr.Rows.DefaultCellStyle.BackColor)

Je ne sais pas si je suis très clair, mais par l'intermédiaire de Contr, je n'accède qu'aux propriétés "génériques" des contrôles, pas à celles spécifiques du DGV de mon Case.

Y a t-il une solution?

Merci d'avance.