
Hello Actipro Developers,
I'm currently implementing a custom shortcut for line breaks in SyntaxEditor through code.
Since I couldn’t find any official method that directly supports this feature in the documentation, I decided to implement it myself.
Here is my code:
private void OnEditorPreviewKeyDown(object sender, KeyEventArgs e)
{
var isEnter = e.Key == Key.Return;
var index = editor.ActiveView.Selection.CaretOffset;
var mods = Keyboard.Modifiers;
if (isEnter)
{
if ((mods & ModifierKeys.Control) != 0)
{
editor.Text = editor.Text
.Insert(editor.ActiveView.CurrentViewLine.EndOffset, Environment.NewLine);
editor.ActiveView.Selection.CaretOffset
= editor.ActiveView.CurrentViewLine.NextLine.StartOffset;
e.Handled = true;
}
}
}
As shown in the code, when pressing Ctrl+Enter, a new line should be inserted immediately below the current one, and the caret should move to the beginning of that new line.
However, I noticed that the value returned by editor.ActiveView.CurrentViewLine.EndOffset
does not match the actual editor.Offset
.
Because of this mismatch, the custom line break doesn’t behave as expected.
From what I can tell, the offset calculation seems to ignore characters like \r\n
, which might be causing the inconsistency.
It seems that the offset calculation removes or ignores the \r\n
characters, which makes it difficult to insert a new line at a specific character index.
I don’t quite understand why this happens, and it causes some trouble when trying to calculate the correct position for inserting a newline.
Could you please advise whether there’s a more convenient or recommended way to insert a new line programmatically in SyntaxEditor?
Thank you!
[Modified 2 days ago]