C# 中 RichTextBox 中关于 ScrollToCaret()与 HideSelection 效果差异的对比

文章介绍了在C#中使用TextBox或RichTextBox时,如何确保当前操作行始终保持在可视范围内。一种方法是设置HideSelection为false,另一种是调用ScrollToCaret方法。调用ScrollToCaret可能导致闪屏,而设置HideSelection为false则能避免此问题并自动滚动到当前行。
摘要由CSDN通过智能技术生成

在C#中,如果我们在使用 TextBox 控件 或者 RichTextBox 控件进行文本输入输出时,我们期望是希望当前正在进行操作的行,或者当前正在更新的行,始终保持在可见的范围内,以利于阅读或者编辑操作。
我们可以通过设置控件的 HideSelection 为 false, 或者在代码中适当的时机调用 ScrollToCaret 方法来达到上述的目的,下面就这两种实现方式所呈现的效果,简做展示。

使用 ScrollToCaret() 的代码块如下

private void rtfInserterByText(RichTextBox rtb,string context,Color color,Font font,bool onNewLine=false)
		{
			if (string.IsNullOrEmpty(rtb.Text))
			{
				// 当 rtb 中没有内容时,不响应新行要求
				onNewLine = false;
			}

			rtb.SuspendLayout();
			rtb.SelectionStart = rtb.TextLength;
			rtb.SelectionLength = 0;

			//设置即将输入的内容的颜色和字体
			rtb.SelectionColor = color;
			rtb.SelectionFont = (font ?? rtb.Font);
			rtb.AppendText(onNewLine ? $"{Environment.NewLine}{context}":context);
			rtb.ScrollToCaret();
						
			rtb.ResumeLayout();
		}

ScrollToCaret方法的功能效果表现如下:
调用 ScrollToCaret 方法的效果展示
在上图所展示的方法中,我们可以看到,光文本内容超过可见范围时,窗口会出现闪屏效果,并且当前正在出内容其实是没有显示完整的。

不调用 ScrollToCaret 方法,为了使光标一直保持在可见范围内,我们可以将 HideSselecton设置为 false,代码如下:

private void rtfInserterByText(RichTextBox rtb,string context,Color color,Font font,bool onNewLine=false)
		{
			if (string.IsNullOrEmpty(rtb.Text))
			{
				// 当 rtb 中没有内容时,不响应新行要求
				onNewLine = false;
			}

			rtb.SuspendLayout();
			rtb.SelectionStart = rtb.TextLength;
			rtb.SelectionLength = 0;

			//设置即将输入的内容的颜色和字体
			rtb.SelectionColor = color;
			rtb.SelectionFont = (font ?? rtb.Font);
			rtb.AppendText(onNewLine ? $"{Environment.NewLine}{context}":context);
			//rtb.ScrollToCaret();
			
			rtb.ResumeLayout();
		}

不调用 ScrollToCaret ,同时设置richTextBox 控件的 HideSselecton 属性为 false,实际效果如下:
不调用 ScrollToCaret  方法,同时将 RichTextBox 控件的 HideSelection 属性设置为 false,效果展示
上图的效果中可见,当输出的内容超过可见范围时,滚动条会自动滚动以使当前正在输出的行进入视野范围,以保障当前行可见,同时屏幕没有出现闪屏现象。

以上两种方式的效果差异,没有深究,未知其因。如果哪位朋友了解,欢迎留言评论,以正视听,不胜感激。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

团圆吧

1 分钱,求鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值