va a astander para proporcionar la solución, lo que hace un muy buen extensión:
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);
}
}
Uso:
dateTimePicker1.Open();
De esta forma, puede reutilizar su extensión cada vez que lo desee, una y otra vez, de cualquier forma, utilizando cualquier control DateTimePicker.
Espero que algunos de ustedes encuentren útil ese simple truco.
~ Joe
Esto parece estar roto en Windows 7 o .NET35. El calendario aparece, pero no responde. Al pasar el control sobre el control no se hace nada, y al hacer clic en una fecha, el calendario desaparece pero no actualiza el valor .Value del control DateTimePicker. –
¡Un poco de magia oscura! Works.Thanks! – fnc12