C# RichtextBox替换文本后如何保留原选中区域?
解决RichTextBox替换文本后保留选中区域的问题
替换RichTextBox选中文本后,选中状态会被自动重置,要保留选中区域以便执行多次替换,只需在替换前后记录并重新设置选中范围即可。
修改后的代码
// 保存原选中区域的起始位置和选中文本 int originalSelectionStart = richTextBox1.SelectionStart; string selectedText = richTextBox1.SelectedText; // 执行正则替换 string replacedText = Regex.Replace(selectedText, "123", "456"); // 替换选中的文本内容 richTextBox1.SelectedText = replacedText; // 重新设置选中区域:起始位置不变,长度为替换后的文本长度 richTextBox1.SelectionStart = originalSelectionStart; richTextBox1.SelectionLength = replacedText.Length;
代码说明
- 替换前记录
SelectionStart(选中区域的起始字符索引),替换操作不会改变该位置的绝对索引,以此为基准能准确定位原选中区域的位置 - 替换后将选中范围重新设置为原起始位置 + 替换后文本的长度,即可选中替换后的内容,无需反复手动选择同一区域
- 原代码中获取行号、字符坐标的逻辑对保留选中区域无帮助,可直接移除
内容的提问来源于stack exchange,提问作者Romesh
相关产品推荐
相关产品推荐

