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

SaveDocumentAsCommand Class

Invokes the File dialog that prompts for a file name, and saves a document in a file with the specified name and format.

Namespace: DevExpress.XtraRichEdit.Commands

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

NuGet Package: DevExpress.RichEdit.Core

#Declaration

public class SaveDocumentAsCommand :
    RichEditMenuItemSimpleCommand

#Remarks

To adjust the SaveAs dialog settings or to accomplish other specific tasks you can substitute the default command with your own custom descendant.

A custom command inherits from the SaveDocumentAsCommand class and overrides the protected ExecuteCore method. To substitute a default command with a custom command, create a new command factory - the class that implements the IRichEditCommandFactoryService interface and intercepts a call that creates a SaveDocumentAsCommand command. Register the new command factory via the IRichEditDocumentServer.ReplaceService<T> method.

The technique is illustrated in the following code snippet.

View Example

using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.Export;
using DevExpress.XtraRichEdit.Services;

public Form1() {
    InitializeComponent();

    CustomRichEditCommandFactoryService commandFactory = 
        new CustomRichEditCommandFactoryService(richEditControl1, 
            richEditControl1.GetService<IRichEditCommandFactoryService>());
    richEditControl1.ReplaceService<IRichEditCommandFactoryService>(commandFactory);
}
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);

        return service.CreateCommand(id);
    }
}

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

    protected override void ExecuteCore()
    {
        SaveFileDialog dialog = new SaveFileDialog
        {
            Filter = "Rich Text Format Files (*.rtf)|*.rtf|All Files (*.*)|*.*",
            FileName = "SavedDocument.rtf",
            RestoreDirectory = true,
            CheckFileExists = false,
            CheckPathExists = true,
            OverwritePrompt = true,
            DereferenceLinks = true,
            ValidateNames = true,
            AddExtension = false,
            FilterIndex = 1
        };
        dialog.InitialDirectory = "C:\\Temp";
        if (dialog.ShowDialog() == DialogResult.OK)
        {
            ((RichEditControl)this.Control).SaveDocument(dialog.FileName, DocumentFormat.Rtf);
        }
        //base.ExecuteCore();
    }
}

You can also use the RichEditControl.SaveDocumentAs API method to achieve the same result.

#Inheritance

Object
Command
DevExpress.Utils.Commands.ControlCommand<IRichEditControl, RichEditCommandId, DevExpress.XtraRichEdit.Localization.XtraRichEditStringId>
DevExpress.XtraRichEdit.Commands.RichEditCommandBase<DevExpress.XtraRichEdit.Localization.XtraRichEditStringId>
See Also