DateTimePicker C# 컨트롤을 프로그래밍 방식으로 열려면 어떻게해야합니까? 컨트롤에 키를 보내서 Datetime Picker 컨트롤에 Calender를 표시하려고합니다. 우리가 할 수있는 방법이 있습니까?Open DateTimePicker C# 프로그래밍 방식으로 프로그래밍
감사
DateTimePicker C# 컨트롤을 프로그래밍 방식으로 열려면 어떻게해야합니까? 컨트롤에 키를 보내서 Datetime Picker 컨트롤에 Calender를 표시하려고합니다. 우리가 할 수있는 방법이 있습니까?Open DateTimePicker C# 프로그래밍 방식으로 프로그래밍
감사
다음
//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);
}
신용이 아주 좋은 확장하게 솔루션을 제공하기 위해 astander로 이동하십시오 :
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);
}
}
사용법 :
dateTimePicker1.Open();
을
이 방법을 사용하면 언제든지 DateTimePicker 컨트롤을 사용하여 언제든지 Extension을 다시 사용할 수 있습니다.
여러분 중 일부는 유용하다는 것을 알기를 바랍니다.
~ 조
하하하, 부두가 재미있었습니다. – Henrique
내 시스템 (Windows 7, .NET 35)에서는 다른 해결책이 작동하지 않았습니다. 나는 MS 토론 사이트에서 또 다른 해결책을 발견했다.
using System.Runtime.InteropServices;
public static class Extensions
{
[DllImport("user32.dll", SetLastError = true)]
private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
private const uint WM_SYSKEYDOWN = 0x104;
public static void Open(this DateTimePicker obj)
{
SendMessage(obj.Handle, WM_SYSKEYDOWN, (int)Keys.Down, 0);
}
}
사용법 :
dateTimePicker1.Open();
경고. dateTimePicker1
이 DataGridView
의 컨트롤 인 경우 (즉, DGV에서 팝업 DatePicker를 만들려고 시도하는 경우)이 기능은 작동하지 않습니다. 컨트롤이 Form
에 추가 된 경우 작동합니다. 그러면 합성 커서 "아래로"이벤트가 DGV에 의해 삼켜지고 DTP의 달력을 드롭 드롭하는 대신 현재 셀 포인터를 아래로 움직입니다.
이것은 Windows 7 또는 .NET35에서 깨진 것 같습니다. 캘린더가 팝업되지만 응답하지 않습니다. 컨트롤을 가리키면 아무 것도 수행되지 않으며 날짜를 클릭하면 달력이 사라지지만 DateTimePicker 컨트롤의 .Value는 업데이트되지 않습니다. –
어둠의 마법! 일. 고마워! – fnc12