As far as I know, the only way to do it is to simulate a mouse click:
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool PostMessage(
IntPtr hWnd,
Int32 msg,
Int32 wParam,
Int32 lParam
);
const Int32 WM_LBUTTONDOWN = 0x0201;
private void myOpenDTPButton_Click(object sender, EventArgs e)
{
Int32 x = myDateTimePicker.Width - 10;
Int32 y = myDateTimePicker.Height / 2;
Int32 lParam = x + y * 0x00010000;
PostMessage(myDateTimePicker.Handle, WM_LBUTTONDOWN, 1, lParam);
}