Ouvrir Automatiquement la liste d'une ComboBox

Résolu
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 5 juillet 2011 - 17 déc. 2009 à 16:00
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre 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 !

38 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 déc. 2009 à 11:42
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
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 déc. 2009 à 17:10
je pense à un SendMessage CB_SHOWDROPDOWN

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 5 juillet 2011
17 déc. 2009 à 17:57
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 déc. 2009 à 18:35
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 5 juillet 2011
17 déc. 2009 à 19:08
Tu pourrais m'expliquer davantage car je ne suis pas au point sur les APIs.

Merci.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 déc. 2009 à 20:03
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 déc. 2009 à 20:58
"une fonction de..." bien de me recadrer là dessus, depuis le temps je fais plus gaffe ^^

++ jmfoutu

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 déc. 2009 à 22:01
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.
0
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 5 juillet 2011
17 déc. 2009 à 22:07
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 déc. 2009 à 22:26
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 déc. 2009 à 22:50
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 déc. 2009 à 22:50
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
0
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 5 juillet 2011
17 déc. 2009 à 23:03
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 déc. 2009 à 23:06
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 déc. 2009 à 23:15
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]
0
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 5 juillet 2011
17 déc. 2009 à 23:15
Ce n'est pas mieux ça fait toujours rien
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 déc. 2009 à 23:19
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.
0
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 5 juillet 2011
17 déc. 2009 à 23:21
La réponse de PCPT fonctionne sur une combobox, mais pas sur mon datetimepicker.

L'argument de
SendKeys.SendWait("%{DOWN}")
a changé ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 déc. 2009 à 23:37
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?
0
SonicDusbir Messages postés 30 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 5 juillet 2011
17 déc. 2009 à 23:46
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 ?
0
Rejoignez-nous