현재 datetimepicker를 사용할 때 월을 입력 한 후에는 오른쪽 화살표 나 "/"를 눌러 해당 날짜로 이동해야합니다. 제가 설정할 수있는 자산이 있습니까, 아니면 그 달이 끝났음을 알 수있는 방법이 있습니까? 그리고 그 날로 이동 한 후 그 해로 이동하십시오. 이는 이전 FoxPro/Clipper 시절에 작성된 응용 프로그램과 동일한 동작입니다.DateTimePicker가 자동으로 다음 datepart로 이동합니다.
답변
속성이 없습니다. 원하는대로 작동하게하려면 키 누르기 이벤트를 처리하고 코드로 처리해야한다고 생각합니다.
@Wael Dalloul이 말했듯이, 당신이 원하는 것을 할 수있는 재산이 없습니다.
플래그 민간 분야를
System.Windows.Forms.DateTimePicker
에서 상속 및 선언 :public class DPDateTimePicker : DateTimePicker { private bool selectionComplete = false; private bool numberKeyPressed = false;
승 API에 대한 상수와 구조체를 정의 손보는 및 스파이 ++ 많은 일 후에, 나는 다음과 같은 솔루션에 온 :
private const int WM_KEYUP = 0x0101; private const int WM_KEYDOWN = 0x0100; private const int WM_REFLECT = 0x2000; private const int WM_NOTIFY = 0x004e; [StructLayout(LayoutKind.Sequential)] private struct NMHDR { public IntPtr hwndFrom; public IntPtr idFrom; public int Code; }
그것은 승리의 API를 사용하기 위해
System.Runtime.InteropServices
에 대한 using 문을 포함 할 필요합니다.OnKeyDown
을 덮어 쓰고 키가 눌 렸는지 여부에 따라 플래그를 설정하거나 지 웁니다 (아래의 두 번째 플래그를 지우십시오).protected override void OnKeyDown(KeyEventArgs e) { numberKeyPressed = (e.Modifiers == Keys.None && ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCode != Keys.Back && e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))); selectionComplete = false; base.OnKeyDown(e); }
재정
WndProc
및 트랩WM_REFLECT+WM_NOTIFY
메시지는 코드가 -759 인 경우는NMHDR
lParam
에서, 다음 (이 이벤트가 완전히 키보드에 가득 필드 중 하나 후에 트리거 다른 플래그를 설정 추출 날짜가 선택됨).protected override void WndProc(ref Message m) { if (m.Msg == WM_REFLECT + WM_NOTIFY) { var hdr = (NMHDR)m.GetLParam(typeof(NMHDR)); if (hdr.Code == -759) //date chosen (by keyboard) selectionComplete = true; } base.WndProc(ref m); }
재정
OnKeyUp
두 플래그를 설정하고 누른 키를 수동으로 다음 플래그를 취소Keys.Right
와WM_KEYUP
다음에WM_KEYDOWN
와base.WndProc
전화, 숫자였다 경우. 이 메시지 중lParam
을 0으로 설정하면 걱정할 필요가 없으며HWnd
은 물론this.Handle
입니다.protected override void OnKeyUp(KeyEventArgs e) { base.OnKeyUp(e); if (numberKeyPressed && selectionComplete && (e.Modifiers == Keys.None && ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCode != Keys.Back && e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)))) { Message m = new Message(); m.HWnd = this.Handle; m.LParam = IntPtr.Zero; m.WParam = new IntPtr((int)Keys.Right); //right arrow key m.Msg = WM_KEYDOWN; base.WndProc(ref m); m.Msg = WM_KEYUP; base.WndProc(ref m); numberKeyPressed = false; selectionComplete = false; } }
코드에 빈 줄의 부족에 대한
죄송하지만, 바로 빈 줄이 표시되지 것입니다, 그래서 그들을했다. 저를 신뢰하십시오, 이것은 더 읽을 수있는 버전입니다.
그것은 아래의 코드
sendkeys.send(".");
를 붙여 값 변경 이벤트에있는 DateTimePicker
윈폼에서 작동합니다
- 1. 확인란을 선택하면 다음 페이지로 이동합니다
- 2. C# DateTimePicker가 루프에 걸렸습니다.
- 3. 오른쪽에 사이트가로드 된 다음 실제 위치로 이동합니다.
- 4. Java 날짜가 다음 10 분으로 이동합니다.
- 5. 스파크리스트 컨트롤 - 'n'키가 다음 행으로 이동합니다.
- 6. DateTimePicker가 너무 일찍 값을 업데이트합니다.
- 7. DateTimePicker가 데이터 집합을 업데이트하지 않습니다
- 8. DateTimePicker가 잘못된 형식으로 날짜를 표시합니다.
- 9. WPF 용 새 DateTimePicker가 필요합니까?
- 10. AVAudioplayer가 자동으로 다음 노래로 전환해야합니다.
- 11. 레일 : 링크가 하나의 속성을 변경 한 다음 뒤로 이동합니다.
- 12. AVQueuePlayer가 AVPlayerItemDidPlayToEndTimeNotification을 보내지 않고 항목 대기열의 다음 AVPlayerItem으로 가끔 이동합니다.
- 13. iPhone 키보드의 리턴 키는 커서를 다음 텍스트 필드로 이동합니다.
- 14. Telerik MVC DateTimePicker가 그리드에서 작동하지 않습니다.
- 15. 문자열을 다음 줄로 자동으로 옮기는 방법
- 16. 누를 때 UIButton이 이동합니다.
- 17. 탭은 페이지 상단으로 이동합니다
- 18. div가 브라우저에서 잘못 이동합니다.
- 19. Tapjoy 화면이 위로 이동합니다.
- 20. 알고리즘이 배열 요소를 이동합니다
- 21. 게임 적이 플레이어쪽으로 이동합니다.
- 22. 리디렉션을 찾아서 iframe으로 이동합니다.
- 23. Google지도가 이에 따라 이동합니다.
- 24. 본문 배경없이 내용이 이동합니다
- 25. MKMapView가 화면 주위를 이동합니다.
- 26. 배경이 이미지와 함께 이동합니다.
- 27. SetVisibleMapRect는 항상 북극해로 이동합니다
- 28. 목록을 추가하고 아래쪽에서 위로 이동합니다.
- 29. Azure로 Facebook C# SDK 구성 설정을 이동합니다.
- 30. WPF DateTimePicker가 유효성 검사 후 날짜를 설정하지 않습니다.