上一篇博文 《玩轉控件:重繪ComboBox —— 讓ComboBox多列顯示》中,根據你們的回饋,ComboBox已經支持篩選了,更新見博文最後最後最後面.html
這兩天遇到一個很「詭異」的狀況,以前手機攔截短信一直用騰訊手機管家,這兩天發神經,把騰訊手機管家卸載掉,換成360手機管家。而後一如既往的設置好鬧鐘,睡覺.. 結果尼瑪一覺睡到天然醒!拿過手機一看11:35am,手機鬧鐘竟然沒響!我很但願今天是星期六,爲此我還狠勁的捏了下我白裏透紅的小臉,卻沒法扭轉今天星期五的窘境。 這還不是最奇葩的,奇葩的是,我拿起手機驚奇的發現:360不見了...騰訊也不見了...鬧鐘也不響了...我凌亂了. 不知道有沒有人遇到過相似的問題、
express
這兩天在維護DevExpress控件開發的報表,測試人員提出報表查詢條件須要按月查詢,我木訥的對着Dev自帶的DateEdit控件許久,又找了幾個Dev其餘的時間控件,沒有一個能夠達到需求標準,因而有了下文:本篇博文代碼部分來自網絡,地址:http://www.devexpress.com/Support/Center/Question/Details/CQ60337
網絡
根據最近看了3遍的《新三國演義》中,諸葛亮佔荊州後收取零陵時,一屠夫的話:"說出吾名,嚇汝一跳"。隨將該組件類前綴用鄙人姓名字母的縮寫,使其繼承DevExpress的DateEdit控件類,以下:
ide
public partial class KzxDateEdit : DateEdit
我用的DevExpress控件是v10.1的,通過測試DevExpress神似在v7.1以上才支持Vista模式.(此處未經考證,如官方人員發現,請將此言論歸爲 大言不慚 之類別!)測試
下面貼出核心代碼:this
public partial class KzxDateEdit : DateEdit { public KzxDateEdit() { InitializeComponent(); Properties.VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True; Properties.DisplayFormat.FormatString = "yyyy-MM"; Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; Properties.Mask.EditMask = "yyyy-MM"; Properties.ShowToday = false; } public KzxDateEdit(IContainer container) { container.Add(this); InitializeComponent(); } protected override PopupBaseForm CreatePopupForm() { if (Properties.VistaDisplayMode == DevExpress.Utils.DefaultBoolean.True) return new CustomVistaPopupDateEditForm(this); return new PopupDateEditForm(this); } } public class CustomVistaPopupDateEditForm : VistaPopupDateEditForm { public CustomVistaPopupDateEditForm(DateEdit ownerEdit) : base(ownerEdit) { } protected override DateEditCalendar CreateCalendar() { return new CustomVistaDateEditCalendar(OwnerEdit.Properties, OwnerEdit.EditValue); } } public class CustomVistaDateEditCalendar : VistaDateEditCalendar { public CustomVistaDateEditCalendar(RepositoryItemDateEdit item, object editDate) : base(item, editDate) { } protected override void Init() { base.Init(); this.View = DateEditCalendarViewType.YearInfo; } protected override void OnItemClick(DevExpress.XtraEditors.Calendar.CalendarHitInfo hitInfo) { DayNumberCellInfo cell = hitInfo.HitObject as DayNumberCellInfo; if (View == DateEditCalendarViewType.YearInfo) { DateTime dt = new DateTime(DateTime.Year, cell.Date.Month, 1, 0, 0, 0); DateTime tempDate = dt.AddMonths(1).AddDays(-1); tempDate = new DateTime(tempDate.Year, tempDate.Month, tempDate.Day, 23, 59, 59); OnDateTimeCommit(tempDate, false); } else base.OnItemClick(hitInfo); } }
沒錯,仍然須要使出拖控件大法,將DevExpress中DateEdit控件拖到窗體中,而後將窗體的設計代碼中InitializeComponent()方法剪切到窗體的.cs文件中,而後從新制定該DateEdit控件實例化對象便可。spa
//this.dateEdit1 = new DevExpress.XtraEditors.DateEdit(); this.dateEdit1 = new KzxDateEdit();
下面是運行效果圖:設計
源碼下載
code