Skip to main content
A newer version of this page is available. .

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.v18.1.dll

Declaration

public class SchedulerInplaceEditorEventArgs :
    EventArgs

The following members accept/return SchedulerInplaceEditorEventArgs objects:

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;
    }
}

The following code snippets (auto-collected from DevExpress Examples) contain references to the SchedulerInplaceEditorEventArgs class.

Note

The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.

Inheritance

Object
EventArgs
SchedulerInplaceEditorEventArgs
See Also