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

Windows Forms Discussion :

Re-dessiner un DataGrid


Sujet :

Windows Forms

  1. #1
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut Re-dessiner un DataGrid
    Bonsoir,

    Je travaille actuellement sur un petit projet de lecteur audio que je code en C# sous Visual Studio 2003. Cette version date mais voulant présenter ce projet pour mes examens j'ai cette contrainte lié au logiciel qui sont installé dans mon etablissement scolaire (faudrait quand même se mettre à jours un jours...bref).

    Ayant fait des applications Windows Forms sous Vb c'est la première fois que j'en fait une en C#. Et pour changer de ce que j'ai fait jusqu'à maintenant je voulais travailler un peu (beaucoup) plus le design.

    Dans mon application je voudrais donc pouvoir utiliser un DataGrid pour afficher soit la bibliothèque de chanson, soit une playliste. Et c'est ce même DataGrid que je voudrais rendre un peu plus beau. Je désirerais pouvoir le re-dessiner.. J'aimerais aboutir à un résultat un peu similaire au même genre de tableau que l'on trouve sur Itune ou Spotify. Cependant après de longues heures de recherches je n'ai pas trouvé d'information qui m'ai beaucoup fait avancer. J'ai juste compris qu'on pouvais surcharger les méthodes de la classe DataGrid en la dérivant tel que onPaint, onClick,.....

    J'aimerais par exemple pouvoir modifier les entêtes de colonnes. Pas la couleur, ni la police mais par exemple les bordures qui sépare chaque entêtes. Je n'ai déjà pas trouvé d'option pour changer cela. Ensuite j'aimerais pouvoir sur ces même entêtes crée un dégradé.

    Autre questions mais plus lié sur le fonctionnel. Quand on clique sur une cellule d'un DataGrid, on peut éditer ladite cellule. Je voudrais, comme sur la plupart des soft audio, quand on clique sur une cellule cela sélectionne là ligne, sans qu'on ai de textbox dedans, et que sa couleur change. Pour la surbrillance j'ai déjà trouvé une première solution, cependant le fait qu'il y ai encore la cellule qui soit éditable donne l'impression que la ligne clignote avant de mettre la couleur de surbrillance.

    Dernière question. En VB j'avais pour habitude d'utiliser monDataGrid.currentRowIndex pour récuperer la ligne qui a été selectionné. Cependant en C# je n'arrive pas à faire fonctionner cela, la valeur renvoyée est toujours égale à 0. J'ai trouvé une pseudo solution pour récuperer la ligne sélectionné qui utiliser DataGrid.HitTestInfo et monDataGrid.HitTest mais je trouve ça un peu lourd, surtout que currentRowIndex est censé renvoyé la l'index de la ligne. Donc où peut être le problème?

    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Vu tout ce que tu demande, pourquoi utiliser un DataGrid ?

    Une ListView serait peut être plus appropriée.

    Par contre, si tu veux modifier le design de ton control, tu va devoir passer par OnPaint et faire tout les changements toi même. Commence à te documenter sur GDI+, la bibliothèque de dessin intégré au framework.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut
    Merci pour ta réponse,

    Je vais me plonger du côté des listView et de GDI+.

    Par contre aurais tu quelques ressources (tuto, exemple,...) assez clair et explicative sur GDI+?

    Merci d'avance.

  4. #4
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Suffit de chercher sur le site

    http://merlin.developpez.com/cours/delphi/dotnet/gdi/

    et tout en bas de la page :
    http://jca.developpez.com/cscours.php
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut
    Merci,

    La deuxième ressource je l'avais déjà trouvé celle-ci par la contre la première non.

    Malgrés d'autre recherches effectuées j'ai encore du mal à bien voir la choses, c'est la première fois que je m'attaque à designer une application sans laisser le design par défaut. Par exemple pour le cas de ma listView, il faudrait que je puisse re-dessiner les entêtes de colonnes (ce qui inclut la couleur de fond et les bordures principalement), ensuites les lignes; pour celle-ci faudrait que je change principalement la couleur de fond mais aussi la couleur qui est mise quand on en séléctionne une.

    D'ailleurs concernant la couleur de fond des lignes existe-il comme sur les DataGrid une propriété pour mettre une couleur différente une ligne sur deux?

    J'ai regardé déjà comment on pouvait faire override sur les méthodes tel que onPaint, onClick,..... J'ai fait une classe qui hérite de System.Windows.Forms.ListView. Et j'ai tenté de faire une surcharge sur onPaint cependant il semble que cela n'ai changé quoi que ce soit. Donc déjà sur quel méthode toutes mes instructions concernant le re-dessinage vont devoir se placer? Est-ce lors de l'instanciation de l'objet ou bien dans une méthode plus approprié?

    Enfin bref, beaucoup de question. J'ai pris le temps de chercher mais le peu que j'ai trouvé sur le sujet ne me donne pas de réponse clair à mes questions et étant grand débutant pour dessiner mes propres controls cela n'est pas évident de commencer. Aurait-tu par exemple des exemples (je pense principalement à des tutos) qui montrerais comment re-dessiner un controls? La doc que j'ai trouvé sur GDI+ est bien mais ne m'éclair pas encore assez sur la manière de procéder.

    Je te remercie d'avance pour ton aide.

  6. #6
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Je pense que ceci pourra t'aider, y'a une solution d'exemple : http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  7. #7
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut
    Merci,

    J'ai jeté un coup d'oeil. Créer un control en partant de rien comme dans leur exemple va être une tâches ardues mais le jeu en vaudra la chandelle. Je sent que les questions vont surement fuser....

    En tous cas merci.

  8. #8
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut
    Bon j'ai déjà essayé de jouer un petit peu avec la surcharge sur onPaint sur un panel de mon application, je lui y ai ajouté un petit coup de pinceau LinearGrdientBrush. C'est nickel à une exception que sur mon panel j'avais des PictureBox et il se trouve que le fond de l'image reste gris, et ne prenne pas le dégradé que j'avais mis sur le panel qui est en dessous. Pourtant mes PictureBox ont un fond transparent. Une idée de ce qui n'irait pas?

    Merci d'avance

  9. #9
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    En Windows Forms, la transparence est assez mal gérée...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  10. #10
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut
    Comment puis-je faire pour régler ce problème? Ca fait assez moche (voir les screen un peu plus bas, qui concerne un autre problème...... ). Les images que j'utilise sont des PNG avec fond transparent travaillé sous Gimp. Je n'utilise pas de liste d'image, quand je veux les charger ou changer je fait un File.FromFile().

    Edit: J'ai un autre petit problème. Je viens de passer mon projet de VS 2003 à VS 2008. Tout c'est bien passé sauf que maintenant j'ai du mal à deplacer mes controls exactement à l'endroit ou je veux. En faite que j'agrandis ou rétrécis un control par exemple un panel, quand je passe à hauteur des bords d'un autre control une ligne bleu se dessine et mon panel se cale à celle ci. Donc si je voudrais le mettre à 1 px ou 2 avant je peux pas. Une image vaut mieux pour comprendre:

    Voici le problème en tentant de déplacer un label:


    Et la en voulant caler mon panel gris un tout petit avant ma listView(la grosse boite grise de droite), on voit qu'une ligne bleue se dessine sur les bord de la pictureBox du bas (celle qui represente le volume) et donc je ne peux mettre le panel avant la listView et chevauche celle-ci de quelques pixels.




    On ne s'en rend pas bien compte dans VS mais quand l'application tourne on voit que ça chevauche.



    Oui ok c'est quelques millimètre mais je suis pointilleux. Et de plus quand j'y regarde bien en faite mes controls quand ils s'approchent des bords d'un autre où qu'il soit ce cale automatiquement à celui-ci. Donc comme je l'ai déjà dit si je veux le placer 1 ou 2 pixels avant c'est pas possible. Sous VS 2003 j'avais pas ce problème, et au tout début de l'utilisation de 2008 non plus. Donc peut être ai-je du toucher à une option sans me rendre compte du problème de suite.

    Donc si vous avez une idée du problème merci d'avance.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Je crois qu'il y a un paramétrage pour le problème de positionnement avec le Designer de formulaire mais ce comportement par défaut du Designer permet de gagner beaucoup de temps sur les cas standard ou on cherche à tout aligner.

    Donc je préfère utiliser les solutions suivantes :
    - utiliser [touche Windows]+[les flèches de direction] pour déplacer finement les contrôles sélectionnés.
    - utiliser la propriété "Location" dans la Vue "Propriété" quand le contrôle à déplacer est sélectionné.

  12. #12
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Oui cela marche nickel avec ton raccourci. Par contre ce problème de transparence est embétant. Je cherches des solutions mais pour le moment je n'ai rien de concluant. Il doit bien exister un moyen de palier à ce problème.

  13. #13
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Bon j'ai finalement mis mon application sous WPF et je n'ai plus de problème de transparence.

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

Discussions similaires

  1. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  2. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44
  3. [VB6] Datagrid afficher ou cacher des colonnes par code
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/02/2003, 17h19
  4. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37
  5. Réponses: 3
    Dernier message: 12/06/2002, 19h03

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