最近項目中很多地方使用到DevExpress的DateEdit控件,而且設置都是一致(日期格式、選擇日期的日歷的風格等)。每一次都需要設置太痛苦,因此需要尋找一種高效的解決方式。
一、 設置好一個作為模板,其它地方需要的話復制粘貼
這是一個好方法,不過對於我這種希望通過編程思維的方式來解決問題的話,這種不是最好的方法。
二、 對DateEdit封裝一個擴展方法,擴展方法里設置好以上所提到的設置項, 每次都在代碼里調用擴展方法。
這種方法貌似是編程方式,但是每次都需要調用擴展方法,顯然並不是最好的。
三、 重寫默認的DateEdit設置,也就是本篇的核心。
首先,添加一個DevExpress Item,在彈出的窗體中左側選擇Custom Data Edit,右側Base Editor中下拉選擇DateEdit,修改好Type Name與Item Name, 勾選ViewInfo(Painter和PopupForm可以不勾選),點擊Add Item完成添加自定義DateEdit控件。
此處我的TypeName為MyDateEdit,Item Name為MyDateEdit.cs
在RepositoryItemMyDateEdit類中,添加重寫方法CreateMaskProperties,實現如下:
protected override MaskProperties CreateMaskProperties() { MaskProperties maskProperties = base.CreateMaskProperties(); maskProperties.MaskType = MaskType.DateTime; maskProperties.EditMask = @"yyyy-MM"; maskProperties.UseMaskAsDisplayFormat = true; return maskProperties; }
在MyDateEdit類中,修改原來的Propertie屬性代碼。
修改前:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public new RepositoryItemMyDateEdit Properties { get { return base.Properties as RepositoryItemMyDateEdit; } }
修改后:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public new RepositoryItemMyDateEdit Properties { get { RepositoryItemMyDateEdit repositoryItemDateEdit = base.Properties as RepositoryItemMyDateEdit; if (repositoryItemDateEdit != null) { repositoryItemDateEdit.VistaCalendarInitialViewStyle = VistaCalendarInitialViewStyle.YearView; repositoryItemDateEdit.VistaCalendarViewStyle = VistaCalendarViewStyle.YearView; } return repositoryItemDateEdit; } }
編譯后,在工具箱就能看到MyDateEdit控件。 將控件拖拽到winform窗體中,運行程序,效果如下。