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

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

38 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 18 déc. 2009 à 11:42
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

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

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
SonicDusbir 30 Messages postés dimanche 24 septembre 2006Date d'inscription 5 juillet 2011 Dernière intervention - 17 déc. 2009 à 17:57
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 17 déc. 2009 à 18:35
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
SonicDusbir 30 Messages postés dimanche 24 septembre 2006Date d'inscription 5 juillet 2011 Dernière intervention - 17 déc. 2009 à 19:08
0
Merci
Tu pourrais m'expliquer davantage car je ne suis pas au point sur les APIs.

Merci.
Commenter la réponse de SonicDusbir
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 déc. 2009 à 20:03
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 17 déc. 2009 à 20:58
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 déc. 2009 à 22:01
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
SonicDusbir 30 Messages postés dimanche 24 septembre 2006Date d'inscription 5 juillet 2011 Dernière intervention - 17 déc. 2009 à 22:07
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 déc. 2009 à 22:26
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 déc. 2009 à 22:50
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 17 déc. 2009 à 22:50
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
SonicDusbir 30 Messages postés dimanche 24 septembre 2006Date d'inscription 5 juillet 2011 Dernière intervention - 17 déc. 2009 à 23:03
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 17 déc. 2009 à 23:06
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 17 déc. 2009 à 23:15
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
SonicDusbir 30 Messages postés dimanche 24 septembre 2006Date d'inscription 5 juillet 2011 Dernière intervention - 17 déc. 2009 à 23:15
0
Merci
Ce n'est pas mieux ça fait toujours rien
Commenter la réponse de SonicDusbir
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 déc. 2009 à 23:19
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
SonicDusbir 30 Messages postés dimanche 24 septembre 2006Date d'inscription 5 juillet 2011 Dernière intervention - 17 déc. 2009 à 23:21
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 17 déc. 2009 à 23:37
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
SonicDusbir 30 Messages postés dimanche 24 septembre 2006Date d'inscription 5 juillet 2011 Dernière intervention - 17 déc. 2009 à 23:46
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.