Hiện tại, khi sử dụng bảng kê dữ liệu, sau khi bạn nhập tháng bạn phải nhấn mũi tên phải hoặc "/" để di chuyển đến ngày đó. Có một tài sản mà tôi có thể thiết lập hoặc một cách để biết rằng tháng được thực hiện và di chuyển đến ngày và di chuyển đến năm sau khi người dùng được thực hiện với ngày? Đây là hành vi tương tự với các ứng dụng được viết trong các ngày FoxPro/Clipper cũ.DateTimePicker tự động di chuyển đến ngày tiếp theo
Trả lời
Không có Thuộc tính để làm cho nó hoạt động như những gì bạn muốn, tôi nghĩ bạn phải xử lý sự kiện nhấn phím và thực hiện theo mã.
Như @Wael Dalloul nói, không có tài sản để làm những gì bạn muốn. Sau rất nhiều không quan trọng và làm việc Spy ++, tôi đến khi các giải pháp sau đây:
Thừa hưởng từ
System.Windows.Forms.DateTimePicker
, và tuyên bố các lĩnh vực tư nhân cho cờ:public class DPDateTimePicker : DateTimePicker { private bool selectionComplete = false; private bool numberKeyPressed = false;
Xác định hằng số và cấu trúc cho Win 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; }
Cũng cần bao gồm tuyên bố sử dụng cho
System.Runtime.InteropServices
để sử dụng API Win.Ghi đè
OnKeyDown
và đặt hoặc xóa cờ dựa trên nếu phím được nhấn là số (và xóa cờ thứ hai bên dưới).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); }
Override
WndProc
và bẫy thông điệpWM_REFLECT+WM_NOTIFY
, trích xuất cácNMHDR
từlParam
, sau đó thiết lập cờ khác nếu mã là -759 (sự kiện này được kích hoạt sau khi một trong những lĩnh vực là hoàn toàn đầy với bàn phím và một ngày được chọn).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); }
Override
OnKeyUp
và nếu cả hai lá cờ được thiết lập và phím bấm là một con số, bằng tay gọibase.WndProc
với mộtWM_KEYDOWN
theo sau là mộtWM_KEYUP
vớiKeys.Right
, sau đó xóa cờ của bạn. Bạn có thể đặtlParam
của các thư này thành 0 và đừng lo lắng về điều đó vàHWnd
là tất nhiênthis.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; } }
Xin lỗi cho việc thiếu các dòng trống trong các mã, nhưng nó sẽ không hiển thị đúng với các dòng trống, vì vậy tôi đã đưa họ ra ngoài. Tin tôi đi, đây là phiên bản dễ đọc hơn.
Nó sẽ làm việc trên winforms DateTimePicker
trên sự kiện thay đổi giá trị dán mã dưới đây
sendkeys.send(".");
- 1. Di chuyển tiêu điểm đến ô tiếp theo trên phím Enter Nhấn trong WPF DataGrid?
- 2. cách di chuyển đến các dấu ngoặc kèm theo tiếp theo trong VI
- 3. Emacs: di chuyển đến một ký tự nhất định, chuyển tiếp và lùi
- 4. Mongoose - Chuyển đến phần tử tiếp theo
- 5. Di chuyển lên UITextField tiếp theo khi 'Tiếp theo' được khai báo
- 6. Di chuyển đến dấu ngoặc đơn mở hoặc đóng tiếp theo trong VIM
- 7. VB.NET - Cách di chuyển đến mục tiếp theo a Đối với mỗi vòng lặp?
- 8. ifstream, kết thúc của dòng và di chuyển đến dòng tiếp theo?
- 9. Làm thế nào để bàn phím di chuyển đến trường văn bản tiếp theo
- 10. Nhận số tự động tăng tiếp theo
- 11. Di chuyển phần tiếp theo không thành công (postgres)
- 12. Cách: Tự động di chuyển Google Gauge?
- 13. DateTimePicker: chọn cả ngày và giờ
- 14. jsp: thẻ chuyển tiếp chuyển tiếp đến hành động Struts 2
- 15. UITableView di chuyển đến ô
- 16. di chuyển đến C++ 11
- 17. Trong Javascript, làm cách nào để tự động di chuyển con trỏ đến hộp văn bản tiếp theo khi hộp văn bản hiện tại đầy?
- 18. Chuyển đến lỗi tiếp theo FILE trong Intellij
- 19. Làm thế nào để hiển thị lỗi web2py trực tiếp (tự động chuyển hướng đến vé)
- 20. Lấy nét tự động xem văn bản tiếp theo
- 21. tự động chuyển hướng đến https?
- 22. Ember - Tự động chuyển hướng đến firstObject
- 23. tự động chuyển hướng đến một trang
- 24. javascript: Di chuyển dấu nháy đến ký tự cuối cùng
- 25. Nhấp vào sự kiện được chuyển đến lần bắt đầu tiếp theo Hoạt động
- 26. Chuyển tiếp trang di động jQuery CSS3 mà không cần thư viện di động jQuery
- 27. Git - Tự động chuyển tiếp nhanh chóng tất cả các nhánh theo dõi khi kéo
- 28. Cách di chuyển C# LinkedList theo thứ tự ngược lại
- 29. Di chuyển tiêu điểm đến nhóm tab tiếp theo trong Visual Studio 2008/Visual Studio 2010 qua bàn phím?
- 30. Firefox "trượt" chuyển tiếp di chuột