.NET Framework 4.5.2+
.NET Framework 4.5.2+
.NET Standard 2.0+

IRichEditCommandFactoryService Interface

Defines a service that is used to create RichEdit commands.

Namespace: DevExpress.XtraRichEdit.Services

Assembly: DevExpress.RichEdit.v21.2.Core.dll

Declaration

[ComVisible(true)]
public interface IRichEditCommandFactoryService

Remarks

The code below implements the IRichEditCommandFactoryService descendant, which generates customized SaveDocumentCommand and SaveDocumentAsCommand commands. The command descendants override the ExecuteCore methods to display a message after a document has been saved. The IsModified internal property indicates unsaved changes in the document. If this property is not changed to false after a document is saved, it signals that the save action failed.

public class CustomRichEditCommandFactoryService : IRichEditCommandFactoryService {
    readonly IRichEditCommandFactoryService service;
    readonly RichEditControl control;

    public CustomRichEditCommandFactoryService(RichEditControl control, IRichEditCommandFactoryService service) {
        DevExpress.Utils.Guard.ArgumentNotNull(control, "control");
        DevExpress.Utils.Guard.ArgumentNotNull(service, "service");
        this.control = control;
        this.service = service;
    }

    public RichEditCommand CreateCommand(RichEditCommandId id) {
        if(id == RichEditCommandId.FileSaveAs) {
            return new CustomSaveDocumentAsCommand(control);
        }
        if(id == RichEditCommandId.FileSave) {
            return new CustomSaveDocumentCommand(control);
        }
        return service.CreateCommand(id);
    }
}

public class CustomSaveDocumentCommand : SaveDocumentCommand {
    public CustomSaveDocumentCommand(IRichEditControl richEdit) : base(richEdit) { }

    protected override void ExecuteCore() {
        base.ExecuteCore();
        if(!DocumentServer.Modified) {
            MessageBox.Show("Document is saved successfully");
        }
    }
}


public class CustomSaveDocumentAsCommand : SaveDocumentAsCommand {
    public CustomSaveDocumentAsCommand(IRichEditControl richEdit) : base(richEdit) { }

    protected override void ExecuteCore() {
        DocumentServer.Modified = true;
        base.ExecuteCore();
        if(!DocumentServer.Modified) {
            MessageBox.Show("Document is saved successfully");    
        }                
    }
}

The following code replaces the IRichEditCommandFactoryService service with its descendant.

richEditControl.Text = "A message box is displayed when a document is saved on the 'Save' or 'Save As' button click since custom commands are used.";
var myCommandFactory = new CustomRichEditCommandFactoryService(richEditControl, richEditControl.GetService<IRichEditCommandFactoryService>());
richEditControl.ReplaceService<IRichEditCommandFactoryService>(myCommandFactory);
See Also