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 :

ComboCheckedListBox : Fermer la liste déroulante


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut ComboCheckedListBox : Fermer la liste déroulante
    Bonjour,

    Je veux créer un comboCheckedListBox : il ressemble en tout point à un Date&TimePicker MAIS il ouvre une ListBox à cases à cocher ! (pour ceux qui connaissent MS Reporting Services, c'est le même que je veux, le "multi-value").

    J'ai donc créé un UserControl "ComboCheckedListBox", et un Form "CheckedListBox". J'ai presque réussi à faire ce que je veux, MAIS je ne parviens pas à gérer proprement sa fermeture : j'ai utilisé l'événement "Deactivate" du Form, mais ça ne fonctionne pas (si en fait, mais uniquement durant le test par visual express...).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Private Sub CheckedListBox_Deactivate(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Deactivate
            'On ferme le userControl si on sort du cadre + celui de son parent
    
    If (MousePosition.X < Me.Left) Or (MousePosition.X > (Me.Left + Me.Width)) Or (MousePosition.Y < (Me.Top - MonCombo.Height)) Or (MousePosition.Y > Me.Top + Me.Height) Then
    Me.Hide()
    End If
    End Sub
    Mon contrôle ouvre bien le form, mais dès que je clique à côté ou que je change de fenêtre (côté windows), ce désagréable Form reste là, planté au milieu, au lieu de se fermer bien gentiment !

  2. #2
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Salut,

    Pour avoir utilisé plusieurs fois et en vain les méthodes Left, Right, Top et Bottom d'un contrôle, je peux te dire qu'elles n'ont jamais fonctionné avec moi, étrangement le contrôle se retrouvait à pétaouchnok.

    Utilise plutôt les coordonnées en pixels.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If (Talocbordgauche < MousePosition.X < Talocbordgauche + toncontrole.width) And (Talocbordhaut < MousePosition.Y < Talocbordhaut +toncontrole.height)
     
    toncontrole.Hide()
     
    End If

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    En fait c'est surtout l'événement qui me gêne (il ne se déclenche pas), mais je note ! Une idée sur comment gérer la fermeture de mon listBox sur click à l'extérieur de mon usercontrol ?

  4. #4
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Et bien tout dépend comment tu as déclarer cette fenêtre. Si c'est en modale (avec un showdialog) alors pas le choix, tu dois lui faire un CLose ou un Dispose.

    Sinon, si tu as fais un juste un Show, alors hide devrait fonctionner (si ce que tu veux c'est cacher et non fermer).

    Pour l'évènement, tu peux prendre un Click sur ton formulaire. Utiliser HitTestInfo et le confronter avec les coordonnées de ta fenêtre comme tu faisais.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Je pense me faire mal comprendre : je ne fais pas une fenêtre mais un contrôle utilisateur (réutilisable). Ce que je veux, c'est trouver quel événement utiliser pour savoir lorsque j'en sors ET que je clique ailleurs.

    Mon gros problème, c'est que ce contrôle sera utilisé dans des forms, mais tant que ça n'est pas fait, je ne vois pas comment lancer mon code pour fermer la ListBox (form) de mon userControl.

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    C'est donc un control que tu ajoutes dynamiquement a ton formulaire... Et que tu mets au milieu?

    Quel est le code qui te permet d'ajouter ce control? (ça aidera)

    Et justement, pourquoi ne pas créer un formulaire qui ne contiendra que ce control? La gestion du formulaire me semble plus facile... A moins qu'il y ai une raison?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Ok, alors mon but dans la vie c'est d'ajouter un "composant" dans la "boîte à outils" de "Miscrosoft Visual 2008 Express". Après, comme je ne connais pas cet environnement, j'ai pensé qu'il fallait obligatoirement un contrôle utilisateur, et je n'ai pas essayé d'y mettre un form.

    Bien, maintenant, je ne sais plus comment j'ai fait pour que le compilateur affiche mon userControl en premier... donc je n'arrive pas à tester si je peux mettre un form à la place pour ensuite le mettre dans la "boite à outils"... je commence à galérer...

    Mon projet actuel :
    _ My Project
    _ Form : CheckedListBox.vb
    _ UserControl : ComboCheckedListBox.vb

    Après compilation, le userControl, si on clique sur son bouton, fait :
    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
    Public Class ComboCheckedListBox
     
        Dim vueListBox As New CheckedListBox
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, TextBox1.Click
     
            If vueListBox.Visible Then
                vueListBox.Hide()
            Else
                'MsgBox(Me.Location.X & "//" & Me.Location.Y & "//" & Me.Location.Y + 20)
                'MsgBox(Me.PointToScreen(Me.Location).X & "//" & Me.PointToScreen(Me.Location).Y + 20)
                Me.vueListBox.Location = New System.Drawing.Point(Me.PointToScreen(Me.Location).X - Me.Location.X, Me.PointToScreen(Me.Location).Y - Me.Location.Y + 20)
                Me.vueListBox.Width = Me.Width
                vueListBox.Show()
                vueListBox.MonShower(Me)
            End If
        End Sub
    End Class
    Tandis que mon Form (qui ne contient que ma listBox) se fait passer son objet parent (je ne vois pas d'autre solution pour que les 2 puissent communiquer, en fait !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Class CheckedListBox
     
        Dim MonCombo
     
        Public Sub MonShower(ByVal Combo)
            MonCombo = Combo
        End Sub
    End Class
    Voilà. Si maintenant j'ai tout fait de travers même au niveau philosophique, pas de problème, j'ai le temps, je suis prêt à tout refaire (ok, y'a pas beaucoup de code ^^).

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Vraiment pas d'idées ?

Discussions similaires

  1. [LibreOffice][Base de données] Liste déroulante, Minimiser appli, Compacter et fermer BDD
    Par El Bosc dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 06/12/2013, 18h44
  2. [XL-2010] Fermer la liste déroulante du combobox à la fin de DropButtonClick
    Par bastou93 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2011, 13h29
  3. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01
  4. liste déroulante en ASP vbscript
    Par leeloo076 dans le forum ASP
    Réponses: 9
    Dernier message: 17/03/2004, 16h42
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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