Ouvrir Automatiquement la liste d'une ComboBox [Résolu]

Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
- - Dernière réponse : SonicDusbir
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
- 18 déc. 2009 à 12:13
Bonjour tout le monde !

J'ai une DateTimePicker ( mais je pense que le problème est le même avec une ComboBox) que j'affiche que sous certaines conditions.

Lorsque je l'affiche, j'aimerais ouvrir automatiquement le calendrier ( la liste déroulante dans le cas d'une ComboBox).

Comment faire ?

Merci !
Afficher la suite 

Votre réponse

20/38 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3
Merci
et voilà:
    Private Const WM_LBUTTONDOWN As Int32 = &H201
    Private Const WM_LBUTTONUP As Int32 = &H202

    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        With KryptonDateTimePicker1
            SendMessage(.Handle, WM_LBUTTONDOWN, 1, .Width - 10 + &H50000)
            SendMessage(.Handle, WM_LBUTTONUP, 1, .Width - 10 + &H50000)
        End With
    End Sub




Renfield - Admin CodeS-SourceS - MVP Visual Basic

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
je pense à un SendMessage CB_SHOWDROPDOWN

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
0
Merci
SendMessage ya pas en VB.NET.

Désolé j'aurais peut être du re-précisé que j'étais en VB.NET, sous visual studio 2008
Commenter la réponse de SonicDusbir
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
y'a pas en .Net... euh..... si ^^

fort heureusement d'ailleurs...

suffit de la déclarer, comme toutes les APIs

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
0
Merci
Tu pourrais m'expliquer davantage car je ne suis pas au point sur les APIs.

Merci.
Commenter la réponse de SonicDusbir
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
tu étais en fait invité à utiliser une fonction d'une librairie de l'Api de Windows (pas "une api")
Si tu n'es pas encore familiarisé avec l'utilisation de telles fonctions, voilà un site qui te sera utile, mais cela implique une lecture et une étude :

http://allapi.mentalis.org/apilist/SetStretchBltMode.shtml

Si, par contre, tu estimes que tout cela est trop complexe pour toi, juste un rappel :
Une combobox n'est jamais rien d'autre qu'une espèce de "communion" entre une zone éditable (une textbox fait l'affaire) et une zone de liste (une listbox fait l'affaire).
Une listbox est toujours, elle, "déroulée".
Voilà ! à toi de choisir entre :
- l'apprentissage de l'utilisation des fonctions de l'Api de Windows (et la fonction qui t'a été signalée fera l'affaire)
et
- rester "collé" à ce que t'offre VB et substituer un ensemble textbox + listbox à ta combobox et gérer cet ensemble.
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
"une fonction de..." bien de me recadrer là dessus, depuis le temps je fais plus gaffe ^^

++ jmfoutu

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonsoir, renfield,

la volonté n'était pas celle d'un "recadrage", mais tout bêtement, en "resituant" les choses de manière plus précise, d'en permettre une approche plus parlante. Comprendre (et utiliser intelligemment) les fonctions de l'Api de Windows passe, j'en suis convaincu, par la nécessité de bien voir de quoi est composée cette API : de libairies distinctes (classées par vocations principales) contenant, chacun d'elles, une ou plusieurs fonctions.

Ce que je viens d'exposer là, Renfield, ne l'est pas à ton intention (je n'ai, de très loin, absolument rien à t'apprendre, bien au contraire), mais surtout à celle des forumeurs qui passeront par là (ils auront ainsi une meilleure vision des choses et des mécanismes à mettre en oeuvre pour les utiliser). C'est la seule raison qui fait que je n'hésite pas (tant pis pour mes doigts) à m'exprimer chaque fois complètement en ce qui concerne ces fonctions de l'Api de Windows.

Qu'ils apprennent que ces fonctions répondent aux mêmes principes que toutes les autres fonctions (qu'elles reçoivent des paramètres et retournent une valeur) est le 1er pas. Qu'ils apprennent ensuite que leur utilisation passe par leur déclaration (nom de la fonction et nom de la librairie) en respectant des règles alors particulières de déclaration est le second. Une fois celà bien "ancré", tout est déjà beaucoup moins ésotérique et beaucoup moins décourageant.



___________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
0
Merci
Bon c'est pas évident les API quand même

J'ai récupéré la déclaration de SendMessage, mais par contre après je ne vois pas trop comment l'utiliser avec le CB_SHOWDROPDOWN, car je ne comprend pas trop ce qu'est ce dernier.

Merci de m'éclairer
Commenter la réponse de SonicDusbir
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Il ne s'agit là que d'une constante spécifiant le message à envoyer à ta combo.
Va lire ici :

http://support.microsoft.com/kb/124057/fr

et rappelle-toi que, sous VB.Net (que je ne pratique pas) les long deviennent des Integer (à remplacer l'un par l'autre, donc).

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Et il se peut que la propriété hwnd n'existe pas sous VB.Net (il s'agit du handle de ta combo).
Sous VB.Net, c'est d'ailleurs peut-être tout simplement une propriété handle (ta_combo.handle)
Mais tu seras renseigné sur ce point en frappant handle dans ton aide en ligne ..

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
Fausse route.
et pas de message spécifique.

on a bien un DTM_CLOSEMONTHCAL mais Vista et >
http://msdn.microsoft.com/en-us/library/bb761753(VS.85).aspx

faut trouver un autre moyen.

(je suis sur le coup)

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
0
Merci
Pour l'instant j'ai écrit ça :
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Object) As Long

    Private Const CB_SHOWDROPDOWN As Integer = &H14F


Et pour l'utilisation :
SendMessage(ComboBox_Softs.Handle, CB_SHOWDROPDOWN, True, IntPtr.Zero)


Mais ça ne fait rien
Commenter la réponse de SonicDusbir
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
Merci Spy++

Ensemble, simulons un click :


P
rivate Const WM_LBUTTONDOWN As Int32 = &H201

    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        With DateTimePicker1
            SendMessage(.Handle, WM_LBUTTONDOWN, 1, .Width - 10 + &H8000 * .Height)
        End With
    End Sub


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
salut,

ou en moins propre (c'est à dire sans API)

        DateTimePicker1.Focus()
        ' oubien
        DateTimePicker1.Select()

        SendKeys.SendWait("%{DOWN}")


du pareil au même remarque...

[hr]
Commenter la réponse de PCPT
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
0
Merci
Ce n'est pas mieux ça fait toujours rien
Commenter la réponse de SonicDusbir
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Cer ne serait pas le type du handle ?
=>>> du genre .Handle.toint32 (ou quelquechose du genre ?)
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
0
Merci
La réponse de PCPT fonctionne sur une combobox, mais pas sur mon datetimepicker.

L'argument de
SendKeys.SendWait("%{DOWN}")
a changé ?
Commenter la réponse de SonicDusbir
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
c'est sur un datetimepicker en vb2008 que j'ai essayé dans l'event _click d'un bouton
ta form ne bloque aucune pression clavier?

le contrôle est bien visible au moment de l'appel?
Commenter la réponse de PCPT
Messages postés
30
Date d'inscription
dimanche 24 septembre 2006
Dernière intervention
5 juillet 2011
0
Merci
Effectivement sur un DateTimePicker standard ça fonctionne.

Le problème est que j'utilise le composant issue de la suite Krypton http://www.componentfactory.com/download.php

D'habitude il n'y a pas de différence pour les évènements mais apparemment si Ou pire il y a un bug sur celui-ci.

Comment as tu fait pour trouver l'évènement clavier correspondant ?
Commenter la réponse de SonicDusbir

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.