DateTimePicker

Signaler
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
-
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
-
Bonjour a tous,

Savez-vous s'il est possible d'utiliser le control "DateTimePicker" avec le mois seulement?
C'est a dire:
- Cliquer sur le DateTimePicker montrera les 12 mois directement.
- Cliquer sur le mois affichera directement le mois et l'annee (Format: JUN-2012) sans passer par les jours.

Note: je sais formatter une date, mon probleme se situe plus au niveau de l'utilisation du DateTimePicker.
En d'autre terme, peut-on utiliser les proprietes et methodes du DateTimePicker pour arriver a mon objectif.

Si c'est pas possible, avez-vous d'autres idees ou directions ou chercher pour arriver a mon but?
Ou bien je dois creer mon propre controle. Et dans ce cas, c'est plus de travail.
Merci,

A+
JLuc01

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bonjour,
si ce n'est que pour sélectionner parmi 12 mois, ce n'est vraiment pas la peine de faire les frais d'un tel contrôle ! Une Lisbox ou une combobox feraient l'affaire "à moindre frais" !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Bonsoir ucfoutu,
Une Lisbox ou une combobox feraient l'affaire "à moindre frais"

Ca reste à prouver

JLuc01,

Tu peux personnaliser l'affichage :
DateTimePicker1.Format = DateTimePickerFormat.Custom
DateTimePicker1.CustomFormat = "MMM-yy" 
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
Bonsoir,

ucfoutu: en fait, j'avais pense a une ComboBox avec les 12 mois, mais par contre je n'ai pas l'annee, ou alors il faut faire une autre ComboBox avec les annees et ca commence a devenir plus complique que le DateTimePicker.

banana32: pour l'affichage, je n'ai pas de probleme, j'utilise directement les proprietes Format et CustomFormat.
Ca marche, mais cela resoud seulement une partie du probleme.

1- Lorsque je clique sur DateTimePicker, je dois encore faire un double click sur le mois pour avoir l'affichage des 12 mois.
Je voudrais avoir directement les 12 mois d'afficher, lorsque je clique sur DateTimePicker.

2- Lorsque je clique sur le mois, je dois encore cliquer sur le jour pour avoir l'affichage MMM-yyyy.
Je voudrais avoir directement l'affichage MMM-yyyy, lorsque je clique sur le mois selectionne.

Mais, peut-etre que je demande trop a ce controle DateTimePicker.

Ou alors, si vous avez vu un controle qui pourrais correspondre a mes besoins, cela pourrait me donner des idees.
Sinon, il va falloir que je pense a autre chose.
Merci,

A+
JLuc01
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Bonsoir,

Au choix:
-Un contrôle Calendar
-Un contrôle MonthView.Mais il faudra masquer la partie jours.
[] Ce qui va sans dire. va mieux en le disant.

Moi je verrais bien un simple picturebox avec une jolie image personnalisée chargée dedans représentant les 12 mois. Ensuite, par code, tu détermines une List(Of Rectangle) dans laquelle tu ajoutes 12 rectangles 'fictifs' côte à côte, de manière à couvrir ta picturebox. Lorsque l'utilisateur cliquera sur une coordonnée de la picturebox (qu'on peut transformer en un rectangle de 1 sur 1 de côté), tu n'auras plus qu'à énumérer les 12 rectangles de la List(Of Rectangle) pour savoir lequel est en intersection avec les coordonnées du clic.
if Rectangle.Intersect(rect_clic,rect_enum) <> rectangle.empty then
     mois = liste_rectangle.indexof(rect_enum) + 1
     '...

Je me complique la vie pour rien, oublie l'histoire des rectangles
Il suffit, dans l'événement MouseUp par exemple, de déterminer la coordonnée e.X du clic et de diviser par la largeur / 12.
mois = Math.Floor(1 + e.X / (PictureBox1.Width / 12))

Quoique mon exemple des rectangles reste valable si tu veux disposer tes mois sur une grille de 3X4 ou 2X6 etc...
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
Salut a tous,

Pour info, j'ai trouve ce code (initialement en C#).
Mais, j'avoue ne pas comprendre comment ca marche (si ca marche):

Private Sub dateTimePicker1_DropDown(sender As Object, e As EventArgs)
Dim cal As IntPtr = SendMessage(dateTimePicker1.Handle, DTM_GETMONTHCAL, IntPtr.Zero, IntPtr.Zero)
SendMessage(cal, MCM_SETCURRENTVIEW, IntPtr.Zero, DirectCast(1, IntPtr))
End Sub

' pinvoke: 
Private Const DTM_GETMONTHCAL As Integer = &H1000 + 8
Private Const MCM_SETCURRENTVIEW As Integer = &H1000 + 32

<System.Runtime.InteropServices.DllImport("user32.dll")> _
Private Shared Function SendMessage(hWnd As IntPtr, msg As Integer, wp As IntPtr, lp As IntPtr) As IntPtr
End Function


Lien: http://stackoverflow.com/questions/5270089/how-can-i-show-month-selection-calendar-in-my-app

A+
JLuc01