IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Récupérer propriété cellule DataGridView à partir de la collection Controls du Form


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut Récupérer propriété cellule DataGridView à partir de la collection Controls du Form
    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.

  2. #2
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut
    J'ai trouvé grace à l'idée d'un collègue spécialiste du C# qui ma parlé de reCASTer la variable et que j'ai traduit de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case TypeOf Contr Is DataGridView
                        Dim MonDGV As DataGridView = Contr
                        MesControlsCouleur.Add(MonDGV.Name, MonDGV.RowsDefaultCellStyle.BackColor)
                        MonDGV.RowsDefaultCellStyle.BackColor = Color.White
    Par contre je ne pense pas que ce que je fais soit un "reCASTage"...

    Ca marche comme ça, cependant attention, dans le cadre de controles de type Panel, il faut relancer la boucle de recherche pour parcourir les controles du panel qui pourraient contenir d'autres panels...

    J'ai modifié le code pour avoir une sub qui peut s'appeler elle-même (je crois que ç'est de la "récursivité")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/11/2010, 16h17
  2. récupérer une date a partir d'une datagridview
    Par Manbiz dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/05/2010, 16h02
  3. récupérer propriété cellule
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/07/2009, 07h07
  4. Réponses: 2
    Dernier message: 15/01/2009, 11h21
  5. Récupérer le code SQL à partir d'une requête
    Par Edith_T dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/11/2004, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo