Comment puis-je ouvrir le DoneTimePicker a > C # Contrôlez par programme? Je souhaite montrer le calendrier dans la commande de sélecteur DateTime en envoyant des clés au contrôle. Y a-t-il une façon de faire ça? P>
6 Réponses :
Essayez le suivant
//part of the usings
using System.Runtime.InteropServices;
//declares
[DllImport("user32.dll")]
private static extern bool PostMessage(
IntPtr hWnd, // handle to destination window
Int32 msg, // message
Int32 wParam, // first message parameter
Int32 lParam // second message parameter
);
const Int32 WM_LBUTTONDOWN = 0x0201;
//method to call dropdown
private void button1_Click(object sender, EventArgs e)
{
Int32 x = dateTimePicker1.Width - 10;
Int32 y = dateTimePicker1.Height / 2;
Int32 lParam = x + y * 0x00010000;
PostMessage(dateTimePicker1.Handle, WM_LBUTTONDOWN, 1,lParam);
}
Cela semble être brisé sur Windows 7 ou .NET35. Le calendrier apparaît, mais ce n'est pas réactif. Survolant le contrôle ne fait rien, et lorsque vous cliquez sur une date, le calendrier disparaît mais ne met pas à jour le .value du contrôle DateTimePicker.
Ne fonctionne pas dans Windows 10 64 bits. Le calendrier tombe en panne mais n'est pas réactif. Il manque quelque chose ..
Le crédit va à Astintander pour fournir la solution, ce qui fait une très belle extension:
dateTimePicker1.Open();
Juste et Fyi, cela a fait pas i> travail pour moi, le calendrier s'ouvre, mais dès que l'utilisateur clique sur n'importe où, il se ferme immédiatement, assez inutile.
FYI Nous avons besoin postmessage (obj.handle, wm_lbuttonup, 1, lparam); code> après wm_lbuttontonown, afin d'accepter le clic de souris.
sur mon système (Windows 7, .NET 35) Les autres solutions n'ont pas fonctionné. J'ai trouvé une autre solution sur un site de discussion MS qui fonctionnait. Utilisation: < / p> avertissements. Cela ne fonctionnera pas si le DateTimePicker1 CODE> est un contrôle sur DataGridView code> (c.-à-d. Si vous essayez de créer une satellie pop-up sur la DGV). Cela fonctionne si le contrôle est ajouté au formulaire code> code> à la place. Ce qui se passera est que l'événement de curseur synthétisé "DOWN" sera avalé par le DGV et déplacera le pointeur de cellule actuel en bas au lieu de déposer le calendrier du DTP. P> P>
Cela fonctionne parfait pour moi. Merci.
La réponse acceptée est principalement correcte, mais vous devez également utiliser:
code> wm_lbuttonwown code> événement. p> aussi, évidemment Donc, ma réponse est la suivante: p> Ceci évite le bogue de Mark Lakata dans Windows 7 et / ou .NET 3.5. P> Le raisonnement est simple: le code d'origine simule un événement de boutonnage de la souris, mais ne récupère pas le bouton de la souris comme nous le ferions lorsque nous cliquerons sur le bouton. p> À cet égard, vous pouvez l'essayer vous-même: Si vous appuyez sur le bouton gauche de la souris pour ouvrir un postmessage (DateTimePicker1.handle, wm_lbuttonup, 1, lparam); code> p> wm_lbuttonup > doit être défini précédemment: p> const int32 wm_lbuttonup = 0x0202; Code> p> DateTimePicker CODE> et ne relâchez pas le bouton, vous ne serez pas non plus Capable d'utiliser le contrôle. p> using System.Runtime.InteropServices;
public static class Extensions {
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int PostMessage(IntPtr hwnd, Int32 wMsg, Int32 wParam, Int32 lParam);
public static void Open(this DateTimePicker obj) {
const int WM_LBUTTONDOWN = 0x0201;
const int WM_LBUTTONUP = 0x0202;
int width = obj.Width - 10;
int height = obj.Height / 2;
int lParam = width + height * 0x00010000; // VooDoo to shift height
PostMessage(obj.Handle, WM_LBUTTONDOWN, 1, lParam);
PostMessage(obj.Handle, WM_LBUTTONUP, 1, lParam);
}
}
Source: https://social.msdn.microsoft.com/forums/windows/en-us/f2f0b213-d57a-46de-b924-e21b7ac0882e/programmatical-open -Le-calendrier-of-the-DateTimePicker-Control? Forum = Winforms Reportez-vous à la réponse par DAVID M MORTON HTTPS: // Social .msdn.microsoft.com / Profil / David% 20m% 20morton /? WS = UserCard-mini
//DateTimePicker dtpicker
dtpicker.Select();
SendKeys.Send("%{DOWN}");
Fonctionne bien, simple, clair !!!! Merci
J'ai aimé certaines des idées précédentes et j'ai fini avec ce mélange (testé): utilisation: p>