WinForms method reference

Documentation index · Properties · Types

All methods below belong to CODE.Editor.WinForms.TextEditor unless otherwise noted. Call them from the owning UI thread and await them. Most return Task because they cross the WebView2 bridge; a Task return does not imply that long-running preview/image work has finished unless the method's contract says so. Rejections surface as task exceptions. Use ordinary try/catch in host event handlers rather than blocking the UI thread.

Initialization, loading and persistence

Signature Contract
Task InitializeAsync() Idempotently await initialization; normally starts automatically with the control handle
Task SetEditorTextAsync(string value) Load a serialized value with current options; await acceptance; resets history/bookmarks
Task LoadAsync(string value, EditorFormat format = Markdown, EditorViewMode mode = Visual, EditorLanguage language = Markdown) Set format/view/language and load; PlainText/RichJson force their compatible view
Task<string> GetEditorTextAsync() Retrieve committed serialization; no full policy save validation
Task<EditorSnapshot> GetSnapshotAsync() Retrieve a validated save snapshot
Task FlushAsync() Await current queue and request committed text; does not save to storage
Task<bool> MarkSavedAsync(EditorSnapshot snapshot) Acknowledge a successful save; false if revision/session no longer current or content unsaveable
Task ConvertFormatAsync(EditorFormat format, UnsupportedContentHandling handling = Reject) Convert Markdown/HTML, reset history, then synchronize accepted options through a snapshot

For saving, always persist before calling MarkSavedAsync. ConvertFormatAsync supports Markdown/Html destinations, not arbitrary enum-to-enum conversion. Setting Format on its own is not an explicit conversion operation. See the save contract.

Selection and bookmarks

Signature Contract
Task<EditorSelection> GetSelectionAsync() Flat UTF-16 endpoints for current view
Task SetSelectionAsync(int anchor, int head) Select/focus a logical range
Task<string> GetSelectedTextAsync() Selected plain model text
Task<string> CaptureBookmarkAsync() Capture an opaque selection token
Task<bool> RestoreBookmarkAsync(string token) Restore/focus if still valid
Task ReleaseBookmarkAsync(string token) Release token when finished

Rich offsets are not Markdown/HTML source offsets. A bookmark can map through edits but is invalid after load. A bookmark alone does not guard against asynchronously overwriting changed text.

Formatting and ordinary commands

Signature Contract
Task ExecuteAsync(EditorCommand command) Run a parameterless typed command
Task UndoAsync() Undo
Task RedoAsync() Redo
Task FormatSelectionAsync(TextMark mark, bool? enabled = null) Toggle mark by default; explicit on/off in supported rich context
Task SetContentFontAsync(ContentFont font) Set curated rich font override; Default clears
Task SetContentColorAsync(ContentColor color) Set curated rich color; Default clears
Task SetContentFontSizeAsync(ContentFontSize size) Set supported rich size; Default clears
Task SetLinkAsync(string? url) Set safe link URL; null removes
Task SetBlockStyleAsync(BlockStyle style) Set supported rich block type
Task ReplaceSelectionAsync(string text) Undoable literal replacement
Task ReplaceRangeAsync(int from, int to, string text, int? expectedRevision = null) Replace flat range, optionally checking revision
Task ApplyTransactionAsync(EditorTransaction transaction) Guarded atomic Source-only batch
Task GoToLineAsync(int line) One-based line navigation, clamped to the document

Source Markdown formatting currently supports Bold/Italic toggles; its implementation does not honor enabled as a forced on/off state. Rich fonts/colors/sizes require compatible policy and Visual mode. Use DisplayFontFamily/DisplayFontSize for display-only changes.

EditorCommand includes Undo, Redo, Indent, Outdent, ClearFormatting, ToggleTask, ToggleComment, DeleteRow, DeleteColumn, DeleteTable, ExitStructure, and Newline. Parameter-bearing commands have typed methods rather than a magic string API in C#.

Current bridge caveats: pass an explicit current revision to ReplaceRangeAsync. Its optional null argument is presently forwarded as JSON null, while the JavaScript implementation treats a supplied value as a revision guard and rejects null. For example, use var snapshot = await editor.GetSnapshotAsync(); await editor.ReplaceRangeAsync(from, to, text, snapshot.Revision);. Native JavaScript comment toggling also has a language-name casing mismatch; see the types reference. These are identified source-audit issues, not fixed behavior in this package.

Signature Contract
Task<SearchMatch[]> FindAsync(string query, SearchOptions? options = null) Literal matches with optional case/whole-word filtering
Task SelectMatchAsync(SearchMatch match) Select and reveal a returned match
Task ReplaceAllAsync(string query, string replacement, SearchOptions? options = null) Source-only literal replacement
Task ShowFindAsync(bool replace = false, string? query = null) Open internal find/replace popup, optionally seed query
Task CloseFindAsync() Close popup

Ctrl+F and Ctrl+H invoke this internal UI. There is no built-in Ctrl+G dialog; a host can offer one and call GoToLineAsync. Find/replace policy flags affect the popup. No regular-expression search is implemented.

Lists and tables

Signature Contract
Task InsertTableAsync(int rows = 2, int columns = 2) Insert rectangular table in Visual
Task InsertRowAsync(bool before = false) Insert relative to current row
Task InsertColumnAsync(bool before = false) Insert relative to current column
Task AlignColumnAsync(TableAlignment alignment) Apply Left/Center/Right to current column
Task RestartNumberingAsync(int start = 1) Restart supported ordered-list numbering
Task PasteTsvAsync(string text) Import tab-separated rows/cells

Delete row/column/table and indent/outdent use ExecuteAsync enum values. Table commands depend on the current cell; they do not accept a table ID. Refer to lists and tables for navigation and structural constraints.

Images and clipboard

Signature Contract
Task InsertImageAsync(string source, string alternativeText = "") Insert a durable URL reference in Visual
Task RemoveImageAsync(string id) Remove model image and cancel related pending work as appropriate
Task RetryImageAsync(string id) Retry using retained file/external source; may fail if original unavailable
Task PasteHtmlAsync(string html) Import supported HTML into Visual
Task PasteTextAsync(string text) Paste literal text through current mode
Task CopyAsync() Copy selection to Windows clipboard as plain text
Task CutAsync() Copy text, then replace selection with empty text; no-op for read-only
Task PasteAsync() Paste Windows clipboard text; check ContainsText first in host UI
Task<JsonElement> GetPendingImagesAsync() Current non-ready image records, including errors

PasteHtmlAsync is not a source HTML insertion method; use PasteTextAsync for literal markup in Source. Native clipboard helpers are text-only, while keyboard clipboard interaction can carry HTML/files. A completed paste method does not imply all image uploads are finished. Image file events and storage examples are documented in images and clipboard.

Querying state and managing the surface

Signature Contract
Task<CommandState> QueryCommandStateAsync(TextMark mark) General enabled flag and bool/mixed mark state
Task<CommandState> QueryCommandStateAsync(EditorCommand command) General command state, including history availability
Task<JsonElement> GetCapabilitiesAsync() Effective policy including resolved feature flags
Task<EditorDiagnostic[]> GetDiagnosticsAsync() Current policy violations
Task RebuildSurfaceAsync() Replace DOM adapter while keeping model/history/selection
Task FocusEditorAsync() Focus editor
Task ResizeEditorAsync() Schedule layout measurement

The enabled flag is not a complete structural preflight for every operation. Still handle exceptions and unsupported/no-op results. CommandState.Active is JsonElement; inspect its ValueKind rather than assuming every state is Boolean.

Preview

Signature Contract
Task RefreshPreviewAsync() Schedule new preview for current content/external data
Task<string?> GetPreviewHtmlAsync() Last accepted preview body HTML, or null before a render

RefreshPreviewAsync completes after scheduling, not after the renderer and image loads complete. Observe PreviewRendered for an accepted result. Preview HTML is not the stored document and can include internal anchors. Use the preview hook to preprocess or provide custom HTML, and PreviewCss to style it.

Methods on EditorOptions

SetFeature(EditorFeature feature, bool enabled) sets an explicit override; ResetFeatures() removes all explicit overrides. These are synchronous settings mutations whose application to an initialized editor is queued. ToString() returns a format/view label. PropertyChanged follows INotifyPropertyChanged. Other options are properties described in the property reference.