none
bloquer l'affichage dans une windows form RRS feed

  • Question

  • Bonjour,

    J'ai un petit probleme dans une windows form assez complexe

    l'affichage se modifie beaucoup en fonction des actions de l'utilisateur (apparition / disprition de controles, modification du contenu dans certains autres , ...) ce qui provoque des problemes de flash de l'affichage, lorsque la modification consiste à remplacer le contenu d'un tree-view volumineux par exemple

    Donc , est-il possible de bloquer temporairement tout l'affichage dans la fenetre pendant l'execution du traitement et de provoquer un refresh ensuite ?

    merci d'avance

    luc

    mardi 5 octobre 2010 08:49

Réponses

  • Bonjour,

    J'ai déjà constaté ça, sans savoir être exhaustif :

    - D'abord mettre les objets visible=false s'il y a des données à leur envoyer ... remplaçant l'objet par un autre identique mais vide pour le visuel ...

    - Certaines procédures évènemenielles peuves favoriser l'affichage (Paint) ...

    - Il y a sans doute mieux, mais on peut aussi changer de feuille quand on change les dispositions et contenus, ou encore faire une feuille doublon et tout copier d'un coup ...

    Ça dépend aussi des objets, par exemple dans ce qui suit ça fonctionne très bien sans parasites d'écran :

    Public Class Form1
     Dim i, j As Long
     Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      For i = 22 To 200
       For j = 1 To 10000
        Button1.Left = i
        Button1.Text = Chr(i)
        My.Application.DoEvents()
       Next j
       For j = 1 To 10000
        Button1.Top = i
        My.Application.DoEvents()
       Next j
      Next i
     End Sub
    End Class
    

    ???

    Faudrait voir en pratique, un exemple ...

    Cordialement.

     

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Marqué comme réponse Alex Petrescu jeudi 7 octobre 2010 08:26
    mardi 5 octobre 2010 10:16

Toutes les réponses

  • Bonjour,

    J'ai déjà constaté ça, sans savoir être exhaustif :

    - D'abord mettre les objets visible=false s'il y a des données à leur envoyer ... remplaçant l'objet par un autre identique mais vide pour le visuel ...

    - Certaines procédures évènemenielles peuves favoriser l'affichage (Paint) ...

    - Il y a sans doute mieux, mais on peut aussi changer de feuille quand on change les dispositions et contenus, ou encore faire une feuille doublon et tout copier d'un coup ...

    Ça dépend aussi des objets, par exemple dans ce qui suit ça fonctionne très bien sans parasites d'écran :

    Public Class Form1
     Dim i, j As Long
     Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      For i = 22 To 200
       For j = 1 To 10000
        Button1.Left = i
        Button1.Text = Chr(i)
        My.Application.DoEvents()
       Next j
       For j = 1 To 10000
        Button1.Top = i
        My.Application.DoEvents()
       Next j
      Next i
     End Sub
    End Class
    

    ???

    Faudrait voir en pratique, un exemple ...

    Cordialement.

     

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Marqué comme réponse Alex Petrescu jeudi 7 octobre 2010 08:26
    mardi 5 octobre 2010 10:16
  • Bonjour,

     

    La solution d’ EhJoe est très intéressante. Vallot, est-ce que vous pouvez confirmer si ça marche dans votre cas ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    mercredi 6 octobre 2010 13:25
  • Bonjour,

    la solution de rendre invisible le composant fonctionne tres bien dans mon cas

     

    merci du coup de main

     

    Luc

    jeudi 7 octobre 2010 07:29
  • Bonjour,

    Tant mieux, mais c'est quand même un bug pour moi, car vb6 ne fait pas ça, je ne l'ai constaté que sur vbNet !

    De toute façon un composant invisible se charge plus vite, surtout si c'est dans un objet texte ...

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Proposé comme réponse EhJoe jeudi 7 octobre 2010 09:32
    • Modifié EhJoe jeudi 7 octobre 2010 09:34 rajout
    jeudi 7 octobre 2010 09:32
  • "vallot" a écrit dans le message de groupe de discussion : d6d50aa3-7206-42de-911f-b54df42c34fc@communitybridge.codeplex.com...

    Bonjour,

    Bonjour,

    J'ai un petit probleme dans une windows form assez complexe

    l'affichage se modifie beaucoup en fonction des actions de l'utilisateur (apparition / disprition de controles, modification du contenu dans certains autres , ...) ce qui provoque des problemes de flash de l'affichage, lorsque la modification consiste à remplacer le contenu d'un tree-view volumineux par exemple

    Donc , est-il possible de bloquer temporairement tout l'affichage dans la fenetre pendant l'execution du traitement et de provoquer un refresh ensuite ?

    Pour la Form, SuspendLayout et ResumeLayout peuvent aider.
    Pour le TreeView, c'est prévu : BeginUpdate et EndUpdate.


    Fred
    foleide@free.fr

    vendredi 8 octobre 2010 11:46