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 :

[VB.NET] Ignorer Clique pendant traitement


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Points : 135
    Points
    135
    Par défaut [VB.NET] Ignorer Clique pendant traitement
    Vb.net 2003
    Vs.net 2003
    Framework 1.1

    Bonjour,


    j'ai une CheckedListBox dans ma form et sur clique d'un item, j'ai un long traitement qui se lance. Ce que j'aimerais, c'est empecher le clique pendant le traitement.

    j'ai changé le curseur de la souris en sablier pour commencer et aussi essayé de virer le handler de la CheckedListBox mais sans succès.

    Si l'utilisateur clique encore sur la CheckedListBox, l'application relance autant de fois qu'il y a eu de clique, le traitement...

    Faut il utiliser un messageFilter ?

    Merci pour votre aide!

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Tu pourrais mettre une variable pour savoir si un traitement est en cours, si Oui alors on n'en relance pas un second.
    Sinon tu pourrais Enable la CheckListBox pendant le traitement.

  3. #3
    Membre habitué
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Points : 135
    Points
    135
    Par défaut
    En fait j'ai aussi essayé de changer l'etat de ma checkedlistbox en enabled=false mais la encore =>sans succès

    On dirait que pendant le traitement, tout les cliques de l'utilisateur sur les items de la CheckedListBox sont enregistrés dans la pompe de message puis redistribués au control à la fin du traitement.

    Ce qui fait que meme avec la variable booléenne de controle, on en revient au meme.

    Merci pour tes suggestions !!

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Si ton ttraitement est long, il serait peut être interessant de regarder du coté des Thread et des backGroundWorker pour rendre à ton IHM son indépendance.

  5. #5
    Membre habitué
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Points : 135
    Points
    135
    Par défaut
    le traitement n'est pas tres long (1/2 seconde a 1 seconde) simplement ca laisse le temps a l'utilisateur (qui si il le souhaite) faire plusieurs cliques qui lanceront l'un apres l'autre les traitements associés.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Bien sûre tu fais les modifications de ton IHM, genre CheckBox.Enable = false avant de lancer ton traitement...
    Je comprend pas pourquoi ton IHM se mettrait pas à jour lorsque tu lui demandes.

  7. #7
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Si la mise à jour n'a pas le temps de passer essaye de rajouter "Application.DoEvents()" entre le ".Enabled=False" et le traitement.
    Est-ce que ça change quelque chose ?

  8. #8
    Membre habitué
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Points : 135
    Points
    135
    Par défaut
    Encore une fois merci pour votre aide, je pense que c'est presque bon

    dans la CheckedListBox1, il y a trois items qui sont des chiffres
    (10000,10001,10002)
    sur clique (avec la propriété CheckOnClick activée) la boucle se lance. Le code ci dessous permet de restreindre a deux lancements

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Private Sub CheckedListBox1_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck
            Dim pos As Integer
            Me.CheckedListBox1.Enabled = False
            Application.DoEvents()
            For pos = 0 To Me.CheckedListBox1.Items.Item(e.Index)
                Me.Text = pos
            Next
            Me.TextBox3.Text = 1
            Me.CheckedListBox1.Enabled = True
     
        End Sub
    Sans le application.doevents, La CheckedListBox mémorise les cliques et lance les traitements succèssivement mais bon ca vous aviez compris !!

  9. #9
    Membre habitué
    Profil pro
    Développeur .Net, Administrateur système
    Inscrit en
    Octobre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .Net, Administrateur système
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 219
    Points : 135
    Points
    135
    Par défaut
    je relance le topic au cas ou quelqu'un aurait une idée...

    (Si vous copiez / collez le code ci dessus, vous verrez plus précisement ce qu e je cherche à éviter)

    Merci !

    Est ce que le backgroudWorker pourrait etre une solution ?

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 456
    Points : 1 778
    Points
    1 778
    Par défaut
    salut,
    pourquoi ne pas utiliser un boolean pour savoir si tu peux lancer le traitement? Au début du traitement tu mets par exemple le boolean à false et à true lors de la fin du traitement et lors du clic sur ta CheckedListBox tu ne lances le traitement que si ton boolean est à true.

Discussions similaires

  1. [PHP-JS] Barre de chargement pendant traitement PHP
    Par Floweract dans le forum Langage
    Réponses: 4
    Dernier message: 11/10/2006, 15h16
  2. Réponses: 6
    Dernier message: 28/08/2006, 17h02
  3. [Système] page d'attente pendant traitement system
    Par Squyrrel dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2006, 22h09
  4. [JProgressBar] Mauvaise incrémentation pendant traitement
    Par nicolas.pied dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 16/12/2005, 09h17
  5. [JProgressBar] Afficher barre d'attente pendant traitement
    Par Regis.C dans le forum Composants
    Réponses: 10
    Dernier message: 02/09/2005, 16h43

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