Devexpress DateEdit kontrolünü genişleterek ay ve yıl seçimi yapabilir kontrol oluşturmak

Devexpress MonthEdit

Devexpress kontrolleri kullanıyor ve bazı durumlarda tarih seçimi yaparken kullanıcının sadece ay ve yıl seçmesini istediğiniz durumlar var ise var olan DateEdit kontrolünü genişletmeniz gerekebilir.


Geliştirmiş olduğum kontrol kodları aşağıdaki gibidir :

Örnek uygulamayı buradan indirebilirsiniz.

// MonthDateEdit için genişletilmiş sınıflar

public class MyMonthDateEdit : DateEdit
{
    public MyMonthDateEdit()
    {
        Properties.ShowToday = false;
        Properties.VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True;
        Properties.Mask.EditMask = "y";
    }

    protected override PopupBaseForm CreatePopupForm()
    {
        if (Properties.VistaDisplayMode == DevExpress.Utils.DefaultBoolean.True)
        {
            return new MyVistaPopupDateEditForm(this);
        }
        return base.CreatePopupForm();
    }
}

public class MyVistaDateEditCalendar : VistaDateEditCalendar
{
    public MyVistaDateEditCalendar(RepositoryItemDateEdit item, object editDate) : base(item, editDate)
    {    }

    protected override void Init()
    {
        base.Init();
        CreatePrevImage(true);
    }

    public override DateEditCalendarViewType View
    {
        get
        {
            DateEditCalendarViewType view__1 = base.View;
            return view__1 == DateEditCalendarViewType.MonthInfo ? DateEditCalendarViewType.YearInfo : view__1;
        }
        set { base.View = value; }
    }

    protected override void OnItemClick(CalendarHitInfo hitInfo)
    {
        DayNumberCellInfo cell = hitInfo.HitObject as DayNumberCellInfo;
        if (View == DateEditCalendarViewType.YearInfo)
        {
            DateTime dt = new DateTime(DateTime.Year, cell.Date.Month, CorrectDay(DateTime.Year, cell.Date.Month, DateTime.Day), DateTime.Hour, DateTime.Minute, DateTime.Second);
            OnDateTimeCommit(dt, false);
        }
        else
        {
            base.OnItemClick(hitInfo);
        }
    }
}

public class MyVistaPopupDateEditForm : VistaPopupDateEditForm
{
    public MyVistaPopupDateEditForm(DateEdit ownerEdit) : base(ownerEdit)
    { }

    protected override DateEditCalendar CreateCalendar()
    {
        return new MyVistaDateEditCalendar(OwnerEdit.Properties, OwnerEdit.EditValue);
    }
}

// Repository item için genişletilmiş sınıf 

[UserRepositoryItem("RegisterCustomEdit")]
public class MyRepositoryItemMonthDateEdit : DevExpress.XtraEditors.Repository.RepositoryItemDateEdit
{

    public const string CustomEditName = "MyRepositoryItemMonthDateEdit";
        
    static MyRepositoryItemMonthDateEdit()
    {
        RegisterCustomEdit();

    }

    public MyRepositoryItemMonthDateEdit()
    {
        ShowToday = false;
        VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True;
        Mask.EditMask = "y";
    }

    public override string EditorTypeName
    {
        get { return CustomEditName; }
    }
    public static void RegisterCustomEdit()
    {
        Image img = null;
        try
        {
            img = Bitmap.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("DevExpress.CustomEditors.CustomEdit.bmp"));
        }
        catch 
        {
        }
        EditorRegistrationInfo.Default.Editors.Add(new EditorClassInfo(CustomEditName, typeof(MyMonthDateEdit), typeof(MyRepositoryItemMonthDateEdit), typeof(DateEditViewInfo), new ButtonEditPainter(), true, img, typeof(DevExpress.Accessibility.PopupEditAccessible)));
    }
}

Kaynak ;

Devexpress

Bir cevap yazın