前言
上一篇博文 《玩轉控件:重繪ComboBox —— 讓ComboBox多列顯示》中,根據大家的回饋,ComboBox已經支援篩選了,更新見博文最後最後最後面.
奇葩
這兩天遇到一個很“詭異”的情況,之前手機攔截短信一直用騰訊手機管家,這兩天發神經,把騰訊手機管家解除安裝掉,換成360手機管家。然後一如既往的設定好鬧鐘,睡覺.. 結果尼瑪一覺睡到自然醒!拿過手機一看11:35am,手機鬧鐘居然沒響!我很希望今天是星期六,為此我還狠勁的捏了下我白裡透紅的小臉,卻無法扭轉今天星期五的窘境。 這還不是最奇葩的,奇葩的是,我拿起手機驚奇的發現:360不見了...騰訊也不見了...鬧鐘也不響了...我淩亂了. 不知道有沒有人遇到過類似的問題、
緣由
這兩天在維護DevExpress控件開發的報表,測試人員提出報表查詢條件需要按月查詢,我木讷的對着Dev自帶的DateEdit控件許久,又找了幾個Dev其他的時間控件,沒有一個可以達到需求标準,于是有了下文:本篇博文代碼部分來自網絡,位址:http://www.devexpress.com/Support/Center/Question/Details/CQ60337
故技重施:建立元件類
根據最近看了3遍的《新三國演義》中,諸葛亮占荊州後收取零陵時,一屠夫的話:"說出吾名,吓汝一跳"。随将該元件類字首用鄙人姓名字母的縮寫,使其繼承DevExpress的DateEdit控件類,如下:
public partial class KzxDateEdit : DateEdit
我用的DevExpress控件是v10.1的,經過測試DevExpress神似在v7.1以上才支援Vista模式.(此處未經考證,如官方人員發現,請将此言論歸為 大言不慚 之類别!)
下面貼出核心代碼:
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);
}
}
回到窗體,重新定義窗體設計器的代碼InitializeComponent()
沒錯,仍然需要使出拖控件大法,将DevExpress中DateEdit控件拖到窗體中,然後将窗體的設計代碼中InitializeComponent()方法剪切到窗體的.cs檔案中,然後重新制定該DateEdit控件執行個體化對象即可。
//this.dateEdit1 = new DevExpress.XtraEditors.DateEdit();
this.dateEdit1 = new KzxDateEdit();
下面是運作效果圖:
源碼下載下傳連結
源碼下載下傳
作者:Stephen-kzx
出處:http://www.cnblogs.com/axing/
公衆号:會定時分享寫工作中或者生活中遇到的小遊戲和小工具源碼。有興趣的幫忙點下關注!感恩!
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。