Le crédit va à astander pour fournir la solution, ce qui en fait une extension très agréable:
using System.Linq;
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;
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);
}
}
Utilisation:
dateTimePicker1.Open();
De cette façon, vous pouvez réutiliser votre extension à tout moment, à tout moment, sous n'importe quelle forme, en utilisant n'importe quel contrôle DateTimePicker.
J'espère que certains d'entre vous trouveront cette astuce simple utile.
~ Joe
Cela semble être cassé sur Windows 7 ou .NET35. Le calendrier apparaît, mais il n'est pas réactif. Passer la souris sur 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. –
Kinda magie noire! Travaux. Merci! – fnc12