2008-09-18 37 views
124

Có thể sử dụng DateTimePicker (Winforms) để chọn cả ngày và giờ (trong menu thả xuống) không? Làm thế nào để bạn thay đổi hiển thị tùy chỉnh của giá trị đã chọn? Ngoài ra, có thể cho phép người dùng nhập ngày/giờ theo cách thủ công không?DateTimePicker: chọn cả ngày và giờ

Trả lời

161

Đặt Format Custom và sau đó xác định định dạng:

dateTimePicker1.Format = DateTimePickerFormat.Custom; 
dateTimePicker1.CustomFormat = "MM/dd/yyyy hh:mm:ss"; 

hay tuy nhiên bạn muốn để đẻ nó ra. Sau đó, bạn có thể nhập trực tiếp ngày/giờ. Nếu bạn sử dụng MMM, bạn sẽ cần phải sử dụng giá trị số cho tháng để nhập, trừ khi bạn tự viết một số mã đó (ví dụ: 5 kết quả trong tháng 5)

Không biết về bộ chọn ngày và cùng nhau. Âm thanh như một điều khiển tùy chỉnh với tôi.

+1

cảm ơn bạn rất nhiều !! đã cứu tôi lớn. – rlee923

+12

Đồng hồ 24 giờ: "dd MM yyyy HH mm ss". Tôi đoán nhà phát triển phải quan tâm đến việc bản địa hóa (định dạng ngày/giờ khác nhau ở các quốc gia khác nhau). Chúc mừng từ Áo. – hfrmobile

+4

@hfrmobile - bạn cũng có thể sử dụng 'System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern' và' System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern' để lấy định dạng cho văn hóa hiện tại. [Liên kết MSDN] (https://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo) –

41

Thật không may, đây là một trong nhiều sai lầm trong khuôn khổ, hoặc tốt nhất là vi phạm SRP.

Để sử dụng DateTimePicker cho thời gian, hãy đặt thuộc tính Định dạng thành Thời gian hoặc Tùy chỉnh (Sử dụng tùy chỉnh nếu bạn muốn kiểm soát định dạng thời gian sử dụng thuộc tính CustomFormat). Sau đó đặt thuộc tính ShowUpDown thành true.

Mặc dù người dùng có thể đặt ngày giờ theo cách thủ công, họ không thể sử dụng GUI để đặt cả hai.

+0

+1 Cám ơn những lời khuyên. Đây là những gì tôi đang tìm kiếm. –

1

Bạn có thể hiển thị nó để hiển thị time. Từ đó bạn có thể sẽ phải có hai điều khiển (một ngày, một lần) thực hiện những gì bạn muốn.

1

Tôi sợ điều khiển DateTimePicker không có khả năng thực hiện những điều đó. Đó là một điều khiển khá cơ bản (và bực bội!). Lựa chọn tốt nhất của bạn có thể là tìm điều khiển của bên thứ ba thực hiện những gì bạn muốn. Để có tùy chọn nhập ngày và giờ theo cách thủ công, bạn có thể tạo thành phần tùy chỉnh với kết hợp TextBox/DateTimePicker để thực hiện điều này và nó có thể hoạt động khá tốt, nếu điều khiển của bên thứ ba không phải là một tùy chọn.

19

Bộ chọn ngày giờ có thể được sử dụng để chọn cả ngày và giờ là lý do tại sao nó được gọi là 'Bộ chọn ngày và giờ'. Bạn có thể đặt thuộc tính "Định dạng" thành "Tùy chỉnh" và đặt kết hợp các định dạng khác nhau để thể hiện/chọn ngày/giờ theo các định dạng khác nhau trong thuộc tính "Định dạng tùy chỉnh". Tuy nhiên nếu bạn muốn thay đổi Ngày, thì lịch pop-up có thể được sử dụng trong trường hợp chọn Thời gian (trong cùng một điều khiển, bạn phải sử dụng các phím lên/xuống để thay đổi giá trị). "ddddd, MMMM dd, yyyy hh: mm: ss tt" sẽ cung cấp cho bạn một kết quả như thế này: "Thứ Năm 20 Tháng Tám, 2009 14:55:23"

bạn có thể chơi xung quanh với các kết hợp khác nhau cho các định dạng thông số cho phù hợp với nhu cầu của bạn, ví dụ: MMMM sẽ cung cấp "August" trong khi MM sẽ cung cấp "Aug"

+0

"Bộ chọn ngày giờ có thể được sử dụng để chọn cả ngày tháng và thời gian đó là lý do tại sao nó được gọi là 'Ngày và Bộ chọn thời gian'." - ngoại trừ việc nó không thể, đó là lý do tại sao câu hỏi được hỏi. –

+0

Thật vậy, điều khiển này rất bực bội. Tôi chỉ dành một mã gỡ lỗi buổi chiều cho đến khi tôi nhận ra rằng điều darn sẽ trả về một giá trị đại diện cho ngày người dùng đã chỉnh sửa ** HOẶC ** thời gian, nhưng không phải cả hai. Tôi phải thông báo: làm cách nào một điều khiển có thể hiển thị ngày và giờ hợp lệ do người dùng chỉnh sửa (định dạng tùy chỉnh của tôi là 'yyyy-MM-dd HH: mm') và sau đó trả lại giá trị chỉ phản ánh một phần của ** được hiển thị ** ngày và giờ. Tôi muốn gọi nó là một lỗi, nhưng nó đã ở đó trong nhiều thập kỷ ... – EBlake

36

Tốt nhất nên sử dụng hai DateTimePickers cho công việc Một sẽ là mặc định cho phần ngày và DateTimePicker thứ hai là dành cho phần thời gian.Định dạng DateTimePicker thứ hai như sau.

 timePortionDateTimePicker.Format = DateTimePickerFormat.Time; 
     timePortionDateTimePicker.ShowUpDown = true; 

Hai sẽ trông như thế này sau khi bạn chụp chúng

Two Date Time Pickers

Để có được DateTime từ cả các điều khiển sử dụng đoạn mã sau

DateTime myDate = datePortionDateTimePicker.Value.Date + 
        timePortionDateTimePicker.Value.TimeOfDay; 

Giao DateTime để cả hai điều khiển này đều sử dụng mã sau đây

datePortionDateTimePicker.Value = myDate.Date; 
timePortionDateTimePicker.Value = myDate.TimeOfDay; 
+0

Có khả năng tăng tần suất phút lên 30 phút không? Khi người dùng nhấp vào nút lên hoặc xuống? – FaizanRabbani

+0

Câu trả lời hay! Tôi đã tùy chỉnh UserControl để tái sử dụng nó nhiều lần trong dự án của tôi. – mpasko256

7

Truy cập Properties trong số dateTimePicker trong Visual Studio và đặt Format thành Custom. Dưới CustomFormat nhập định dạng của bạn. Trong trường hợp của tôi, tôi sử dụng MMMMdd, yyyy | hh:mm

enter image description here
dateTimePickerProperties

Các vấn đề liên quan