Back to Devexpress

IRichEditCommandFactoryService Interface

officefileapi-devexpress-dot-xtrarichedit-dot-services-52e57fcd.md

latest6.5 KB
Original Source

IRichEditCommandFactoryService Interface

Defines a service that is used to create RichEdit commands.

Namespace : DevExpress.XtraRichEdit.Services

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

NuGet Package : DevExpress.RichEdit.Core

Declaration

csharp
[ComVisible(true)]
public interface IRichEditCommandFactoryService
vb
<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.

View Example

csharp
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");    
        }                
    }
}
vb
Public Class CustomRichEditCommandFactoryService
    Implements IRichEditCommandFactoryService
    Private ReadOnly service As IRichEditCommandFactoryService
    Private ReadOnly control As RichEditControl

    Public Sub New(ByVal control As RichEditControl, ByVal service As IRichEditCommandFactoryService)
        DevExpress.Utils.Guard.ArgumentNotNull(control, "control")
        DevExpress.Utils.Guard.ArgumentNotNull(service, "service")
        Me.control = control
        Me.service = service
    End Sub

    Public Function CreateCommand(ByVal id As RichEditCommandId) As RichEditCommand Implements IRichEditCommandFactoryService.CreateCommand
        If id.Equals(RichEditCommandId.FileSaveAs) Then
            Return New CustomSaveDocumentAsCommand(control)
        End If
        If id.Equals(RichEditCommandId.FileSave) Then
            Return New CustomSaveDocumentCommand(control)
        End If
        Return service.CreateCommand(id)
    End Function
End Class

Public Class CustomSaveDocumentCommand
    Inherits SaveDocumentCommand
    Public Sub New(ByVal richEdit As IRichEditControl)
        MyBase.New(richEdit)
    End Sub

    Protected Overrides Sub ExecuteCore()
        MyBase.ExecuteCore()
        If (Not DocumentServer.Modified) Then
            MessageBox.Show("Document is saved successfully")
        End If
    End Sub
End Class

Public Class CustomSaveDocumentAsCommand
    Inherits SaveDocumentAsCommand
    Public Sub New(ByVal richEdit As IRichEditControl)
        MyBase.New(richEdit)
    End Sub

    Protected Overrides Sub ExecuteCore()
        DocumentServer.Modified = True
        MyBase.ExecuteCore()
        If (Not DocumentServer.Modified) Then
            MessageBox.Show("Document is saved successfully")
        End If
    End Sub
End Class

The following code replaces the IRichEditCommandFactoryService service with its descendant.

View Example

csharp
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);
vb
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."
Dim commandFactory = New CustomRichEditCommandFactoryService(richEditControl, richEditControl.GetService(Of IRichEditCommandFactoryService)())
richEditControl.ReplaceService(Of IRichEditCommandFactoryService)(commandFactory)

See Also

IRichEditCommandFactoryService Members

Commands in Rich Text Editor

Keyboard Shortcuts in Rich Text Editor

DevExpress.XtraRichEdit.Services Namespace