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 :

Eviter les nombreux appels à OnPaint dûs au nombre de contrôles présents sur le form


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Eviter les nombreux appels à OnPaint dûs au nombre de contrôles présents sur le form
    Bonjour,

    Je suis actuellment occupé à améliorer les performances visuelles d'une application winform.

    J'ai remarqué que les méthodes OnPaint et OnPaintBackground d'une Form ou d'un UserControl étaient appelées à chaque fois qu'un contrôles de cette form ou de ce user control était dessiné.

    Faites le test : nouveau projet avec une seule winform, overridez OnPaint dans le classe Form1 et dedans Console.WriteLine("OnPaint");

    protected override void OnPaint(PaintEventArgs e)
    {
    Console.WriteLine("OnPaint");
    base.OnPaint(e);
    }

    On lance l'applic.
    la sortie nous donne une seule ligne.

    Rajoutons maintenant 2 boutons sur la form.
    On lance l'applic.
    la sortie nous donne 3 lignes (donc 3 passages dans OnPaint).

    Ceci est également valable pour OnPaintBackground.

    Je comprends bien qu'il soit nécessaire que ces méthodes soient appelées après que les boutons soient dessinés un à un, cependant, cela peut devenir fort coûteux en performance.

    Exemple : lorsqu'un user control passe de visible=false à visible=true, le background du user control va se peindre autant de fois que le user control contient de contrôles et il y a dès lors, je pense, un risque de scintillement.

    Quelqun connait-il, dans cet exemple, par exemple, un moyen d'éviter ces multis paint et de ne peindre le tout une bonne fois pour toute, une fois tous les contrôles dessinés ??

    Ou bien fais-je fausse piste ?

    Merci d'avance pour vos impressions ainsi que votre savoir

  2. #2
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Je pense sincèrement que tu dois laisser ce genre de considération au framework. Les mecs qui l'ont mis au point ont probablement pensé à cela et je pense que l'affichage des controles est déjà optimisé.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ce n'est pas parce que tu passes dans la méthode OnPaint que tout est redessiné... en fait seule la partie invalidée est réellement redessinée (la propriété ClipRectangle du PaintEventArgs)
    Enfin, je ne suis pas tout à fait sûr de comment ça marche, mais quand je fait un Paint personnalisé, si j'invalide toute la zone à dessiner, il y a un "clignotement" de l'image parce que tout est rafraichi, alors que si seule une petite partie est invalidée, je n'ai pas ce clignotement : seule la zone invalidée est rafraichie. Pourtant je ne me préoccupe pas dans le code de savoir quelle est la zone invalidée, je suppose que c'est géré par le Framework ou par GDI+

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pour répondre à certains, la gestion du graphisme du framework est une vrai merde
    une centaine de label qui clignotent : vb6 : 1% d'utilisation du pross
    vb.NET2 : 50%

    gdi+ n'utilise pas d'accélération matérielle


    une des méthodes pour gagner un peu de temps et de réécrire une partie des controles ...
    en réérivante le label on arrive à 2 ou 3 %
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ce n'est pas parce que tu passes dans la méthode OnPaint que tout est redessiné... en fait seule la partie invalidée est réellement redessinée (la propriété ClipRectangle du PaintEventArgs)
    Enfin, je ne suis pas tout à fait sûr de comment ça marche, mais quand je fait un Paint personnalisé, si j'invalide toute la zone à dessiner, il y a un "clignotement" de l'image parce que tout est rafraichi, alors que si seule une petite partie est invalidée, je n'ai pas ce clignotement : seule la zone invalidée est rafraichie. Pourtant je ne me préoccupe pas dans le code de savoir quelle est la zone invalidée, je suppose que c'est géré par le Framework ou par GDI+
    En effet, hélas, dans les tests que j'ai fait, dans le cas précis, le ClipRectangle couvre l'entièreté de la form à chaque paint. Hélas.




    Sperot51, ce que tu dis ne m'étonne pas vraiment.

    Vois-tu le moyen d'empêcher le paint de la form ou du usercontrol tant que le dernier contrôle n'a pas été redessiné, par exemple lorsque usercontrol.Visible est passé à true.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    j'espere que ces problèmes de perf sont résolus avec WPF, qui ne s'appuie pas sur les API Win32 et est supposé utiliser l'accélération matérielle...

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'espere aussi qu'avec wpf ca sera mieux, mais wpf ne fonctionnera que sur xp sp3 et vista
    alors que .net 2 marche de w98 à server 2003 ...

    enfin le peu que j'ai pu lire sur wpf ca me laiss penser que tous les controles graphiques seront les meme que .net 2 c'est juste des nouveaux objets 3d de présentation qui serait fait avec wpf
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Sperot, tu avoueras que 100 labels clignotants n'est pas un modèle de design pour une application...

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    c'est à dire ?

    je travaille sur une appli industrielle ... qui en plus peut etre multiécran ... et sous vb6 il n'y avait aucun problème

    de toute facon, meme un seul datagridview que je deplace avec un timer, le truc il saccade à fond dès qu'il passe par dessus un autre objet ..., et encore plus quand il est rempli
    et ce avec une carte graphique nvidia quaddro quelque chose soit disant pro developpement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Je serait curieux de voir à quoi ressemble ton appli alors. Mais j'imagine mal un gars controller 100 labels clignotants toute la journée. Qu'en penses la médecine du travail? :-)

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    avant que l'informatique existe c'était des schemas eletroniques sur des armoires electriques avec plein de petit voyants qui clignotaient ^^

    enfin c'est des images qui clignotent, ou qui change de couleur etc...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    enfin, perso, tous ces problèmes sont souvent revelateurs,non pas forcement
    d'une mauvaise méthode de programmation ni meme d'architecture, mais simplement d'un système informatique... qui nous amene bien souvent à faire un peu de la bidouille...

    En soit, afficher 100 labels, c'est pas grand chose.. Par contre, le soucis
    vient souvent de l'information à afficher...

    L'obtention de l'information à mettre dans le label est-elle rapide ?
    Est-il pertinent d'utiliser bcp d'image ? et si c'est le cas, peut-etre serait-il
    plus judicieux d'avoir 1 unique controle qui fait 100 DrawImage() dans son
    OnPaint() plutot que 100 PictureBox, ou label, ou bouton ?

    J'ai souvent constaté sous windows que l'accumulation de controle (souvent
    du meme type pour afficher une information) amenait des problèmes de rafraichissement... CE qui est logique.. Car chaque controle va devoir se
    dessiner lui-meme... avec son contexte graphique, etc... Et on a beau dire,
    ca ne peut que faire ramer les choses....

    Enfin voila..

    Petite intervention legèrement HS peut-etre... mais bon

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je persiste en disant que sous vb6 ca marchait très bien ...
    mais de toute facon vous inquiétez pas pour moi, je suis passé par des buffered graphics, microsoft ne voulant pas son travail comme il faut, ca m'a donné plus de boulot

    parce que n'aller pas me croire qu'avec 3GHz ce n'est pas faisable d'avoir 100 malheureux controles sur une feuille surtout qu'un mem pc arrive à gérer des milliers de robots qui se tire dessus en 3d !

    et puis si le client a 100 machines, ce n'est pas qui irait lui dire que je vais lui en mettre que 10 sur l'écran !


    autre chose, le datagridview, moi je lui passe une requete qui retourne 30000 lignes, il mets 25secondes à etre utilisable
    là encore j'ai redéveloppé un datagrid hérité du datagridview et il est utilisable de suite et se charge en 7s
    n'allez pas me dire à nouveau que je suis plus intelligent que les développeurs de microsoft
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    autre chose, le datagridview, moi je lui passe une requete qui retourne 30000 lignes, il mets 25secondes à etre utilisable
    là encore j'ai redéveloppé un datagrid hérité du datagridview et il est utilisable de suite et se charge en 7s
    n'allez pas me dire à nouveau que je suis plus intelligent que les développeurs de microsoft
    Beh peut-etre que si justement...

    Moi, je ne pense pas que les meilleurs developpeurs soient TOUS chez Microsoft... donc, du moment que le truc il marche, Microsoft n'a pas forcement la volonté de l'excellence technique... sinon, ca se saurait...

    Mais faut avouer que sur l'aspect Performance gdi et gdi+ ne sont pas des
    foudres de guerre... mais comme pour la plupart des applications, cela est suffisant... il se contente de cela

    The Monz, Toulouse

    PS : Par curiosité, pour passer de 25 à 7 secondes, comment as tu fait ? (je veux dire, si tu peux en dire plus que juste surcharge...)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  15. #15
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    PS : Par curiosité, pour passer de 25 à 7 secondes, comment as tu fait ? (je veux dire, si tu peux en dire plus que juste surcharge...)
    Et de publier cette soluce sur CodePlex rapidement. Un DataGridView 3x plus rapide ca doit intéressé beaucoup de monde.

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'ai suivi un peu l'aide de microsoft en fait lol
    il disent quand il y a beaucoup de de données le datagrid est lent et qu'il faut utiliser virtual mode
    ensuite je charge les données dans un dataview dans un thread asynchrone et sur le thread principal un timer se charge de faire apparaitre le bon nombre de ligne

    rien d'extra ordinaire vous voyez, c'est juste que d'ajouter les lignes dans une boucle le datagridview fait une pluie evenementielle surement pour se rafraichir pour rien
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    j'ai suivi un peu l'aide de microsoft en fait lol
    C'est amusant comme le discours change quand on demande l'explication...
    On passe de "j'ai redéveloppé un datagrid" à "j'ai suivi un peu l'aide de microsoft".
    Les lignes qui suivent ne visent personne en particulier.
    Il semblerait donc que Microsoft pense aussi aux performances. On en revient toujours à la même problèmatique, les développeurs ne savent pas gérer les gros volumes de données, et comme d'habitude, ils blament Microsoft pour leur incompétence.
    Car on pourra me dire tout ce qu'on veut, ajouter 100+ controles sur un formulaire, ça relève déjà d'un certain manque de conception, c'est une pure hérésie ergonomique.

    En ce qui concerne le problème, je rejoints la réponse de tomlev.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  18. #18
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    C'est amusant comme le discours change quand on demande l'explication...
    On passe de "j'ai redéveloppé un datagrid" à "j'ai suivi un peu l'aide de microsoft".
    Les lignes qui suivent ne visent personne en particulier.
    Il semblerait donc que Microsoft pense aussi aux performances. On en revient toujours à la même problèmatique, les développeurs ne savent pas gérer les gros volumes de données, et comme d'habitude, ils blament Microsoft pour leur incompétence.
    bien oui, car le datagridque j'ai fait je pourrais le diffuser il est utilisable, alors pourquoi microsoft n'en a pas fait un comme ca !!!

    Car on pourra me dire tout ce qu'on veut, ajouter 100+ controles sur un formulaire, ça relève déjà d'un certain manque de conception, c'est une pure hérésie ergonomique.

    En ce qui concerne le problème, je rejoints la réponse de tomlev.
    ne jugez pas sans connaitre, et sur excel il n'y a pas des dizaines de boutons et de cases peut etre ???
    excel ne pourrait pas etre développé en .net ! ca serait uen catastrophe
    l'appli sur laquelle je developpe a besoin de ca, je peux rien y faire moi
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    ne jugez pas sans connaitre, et sur excel il n'y a pas des dizaines de boutons et de cases peut etre ???
    excel ne pourrait pas etre développé en .net ! ca serait uen catastrophe
    l'appli sur laquelle je developpe a besoin de ca, je peux rien y faire moi
    Tu n'as pas lu cette ligne :
    Citation Envoyé par Moi
    Les lignes qui suivent ne visent personne en particulier.
    Et pour excel, ce n'est pas une aggrégation de textbox , ne mélange pas tout.
    Il existe des composants .NET proposant une partie non négligeable des fonctionnalités Excel (le Spread de chez FarPoint par exemple), c'est donc possible.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  20. #20
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    de chez FarPoint
    donc pas dans le framework ...
    parce que moi aussi je peux faire des composants fiables et rapide en repartant de control en overridant ce qui ralenti



    enfin je suis pas d'accord avec toi de toute facon ^^


    autre truc louche, j'ai une feuille avec 2 boutons, 3 images et un fond non uni (ca y est j'ai laché le mot)
    au moment de faire .show, on voit la fenetre se construire pendant une bonne demie seconde, ca fait affreux
    j'ai trouvé une bidouille de faire .opacit = 0 / .show / .opacity = 1 et ca apparait instantanément, mais ce framework est quand meme très lent graphiquement, c'est une abération
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [AC-2010] Calculer le nombre de personnes présentes sur des tranches horaires
    Par kader daret dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 21/02/2014, 18h26
  2. Réponses: 2
    Dernier message: 02/10/2013, 21h57
  3. Formater une cellule nombre pour eviter les dieses
    Par z89bo198 dans le forum Excel
    Réponses: 1
    Dernier message: 12/07/2009, 18h06
  4. [TP] Lecture de nombres : comment éviter les plantages ?
    Par le-an dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 20/11/2005, 14h54
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

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