Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

SchedulerInplaceEditorEventArgs Class

Provides parameters which can be used to instantiate a custom in-place editor within the SchedulerControl.InplaceEditorShowing event handler.

Namespace: DevExpress.XtraScheduler

Assembly: DevExpress.XtraScheduler.v24.2.dll

NuGet Package: DevExpress.Win.Scheduler

#Declaration

public class SchedulerInplaceEditorEventArgs :
    EventArgs

The following members return SchedulerInplaceEditorEventArgs objects:

#Example

View Example

public partial class MyInplaceEditor : DevExpress.XtraEditors.XtraForm {
    Appointment appointment;
    SchedulerControl control;

    public MyInplaceEditor(SchedulerInplaceEditorEventArgs inplaceEditorArgs) {
        InitializeComponent();
        this.Text = string.Empty;
        this.ControlBox = false;
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.FormBorderEffect = DevExpress.XtraEditors.FormBorderEffect.None;
        SubscribeKeyDownEvents();
        this.control = inplaceEditorArgs.Control;
        if (inplaceEditorArgs.UseFullCellEditor) {
            this.Bounds = control.RectangleToScreen(inplaceEditorArgs.Bounds);
            DevExpress.Skins.Skin currentSkin = DevExpress.Skins.SchedulerSkins.GetSkin(control.LookAndFeel);
            DevExpress.Skins.SkinElement element = currentSkin[DevExpress.Skins.SchedulerSkins.SkinAllDayAreaSelected];
            this.BackColor = element.Color.BackColor;
            this.ForeColor = Color.White;
        }
        else {
            this.Bounds = AdjustEditorBounds(inplaceEditorArgs.Bounds);
            this.BackColor = inplaceEditorArgs.BackColor;
        }            
    }

    public event EventHandler CommitChanges;
    public event EventHandler RollbackChanges;

    private void SubscribeKeyDownEvents() {
        appointmentLabelEdit1.KeyDown += new KeyEventHandler(AppointmentLabelEdit_KeyDown);
        edtSubject.KeyDown += new KeyEventHandler(Editor_KeyDown);
        edtDescription.KeyDown += new KeyEventHandler(Editor_KeyDown);
    }

    // Create a KeyDown event handler.
    // If the Enter key is pressed, save changes. If the ESC key is pressed, cancel changes.
    void Editor_KeyDown(object sender, KeyEventArgs e) {
        switch (e.KeyCode) {
            case Keys.Enter:
                e.Handled = true;
                OnCommitChanges();
                break;
            case Keys.Escape:
                e.Handled = true;
                OnRollbackChanges();
                break;
        }
    }

    public void AppointmentLabelEdit_KeyDown(object sender, KeyEventArgs e) {
        if (!appointmentLabelEdit1.IsPopupOpen)
            Editor_KeyDown(sender, e);
    }

    void OnCommitChanges() {
        if (CommitChanges != null)
            CommitChanges(this, EventArgs.Empty);
    }

    void OnRollbackChanges() {
        if (RollbackChanges != null)
            RollbackChanges(this, EventArgs.Empty);
    }
    protected override void OnShown(EventArgs e) {
        // Correct the text editor selection, which may result in overwriting the first typed character.
        SchedulerStorage storage = control.Storage;
        if (storage.Appointments.IsNewAppointment(appointment)) {
            edtSubject.SelectionLength = 0;
            edtSubject.SelectionStart = edtSubject.Text.Length;
        }
        base.OnShown(e);
    }

    // Fill the controls with appointment data. 
    public void FillForm(SchedulerControl control, Appointment appointment) {
        this.appointment = appointment;
        SchedulerStorage storage = control.Storage;
        this.appointmentLabelEdit1.Storage = control.Storage; 
        this.appointmentLabelEdit1.AppointmentLabel = storage.Appointments.Labels.GetById(appointment.LabelKey);
        this.edtSubject.Text = appointment.Subject;
        this.edtDescription.Text = appointment.Description;
    }
    // Save changes to the appointment.
    public void ApplyChanges() {
        appointment.Subject = edtSubject.Text;
        appointment.Description = edtDescription.Text;
        appointment.LabelKey = control.Storage.Appointments.Labels.IndexOf(appointmentLabelEdit1.AppointmentLabel);
    }


    // Set the size of inplace editor 
    private Rectangle AdjustEditorBounds(Rectangle editorBounds) {
        Rectangle screenControlBounds = control.Parent.RectangleToScreen(control.Bounds);
        editorBounds.Offset(0, -3);
        Rectangle screenEditorBounds = control.RectangleToScreen(editorBounds);

        Size preferredSize = GetPreferredSize(editorBounds.Size);
        int height = Math.Max(preferredSize.Height, editorBounds.Height);
        int width = preferredSize.Width;

        Rectangle rect = screenEditorBounds;
        rect.Offset(6, 0);

        int maxBottom = Math.Min(screenControlBounds.Bottom, rect.Top + height);
        int top = maxBottom - height;

        Rectangle result = new Rectangle(rect.Left, top, width, height);
        if (screenControlBounds.Right < rect.Right) {
            int horzOffset = control.ActiveView is DayView ? 12 : 8;
            result = new Rectangle(screenEditorBounds.Left - width - horzOffset, top, width, height);
        }
        return result;
    }
}

#Inheritance

Object
EventArgs
SchedulerInplaceEditorEventArgs
See Also