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.1.Core.dll
NuGet Packages: DevExpress.RichEdit.Core, DevExpress.Win.Navigation
Declaration
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.
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.