c# - Richtextbox:在多行文本中查找多行字符串
问题描述
我有一个 RichTextBox,我在其中显示一个段落,我需要更改多行文本的颜色。
我尝试使用该RichTextBox.Find
方法,但它仅适用于单行。
这是我的代码:
richTextBox1.Text=@"Line 1
Line 2
Line 3
Line 4
Line 5
"
Font fnt = new Font("Verdana", 8F, FontStyle.Italic, GraphicsUnit.Point);
string mystring = @"Line 2
Line 3";
//string mystring = @"Line 2";
if (richTextBox1.Find(mystring)>0)
{
int my1stPosition = richTextBox1.Find(mystring);
richTextBox1.SelectionStart=my1stPosition;
richTextBox1.SelectionLength=mystring.Length;
richTextBox1.SelectionFont=fnt;
richTextBox1.SelectionColor=Color.CadetBlue;
}
因此,当我搜索"Line 2"
它时它可以工作但它不适用于:
"Line 2
Line 3"
我错过了什么吗?
解决方案
RichTextBox.Find()方法无法在Text
.
如果您的意图是搜索和选择不同行的内容,那么您可以将这些行拆分为不同的子字符串。这样,即使它们不连续,您也可以选择多行:
注意:
RichTextBox
转换\r\n
(Environment.Newline
在 Windows 中)为\n
.
例如:
richTextBox1.Text = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5";
string[] searchLines = new[] {"Line 2", "Line 3"};
using (Font fnt = new Font("Verdana", 8F, FontStyle.Italic, GraphicsUnit.Point))
{
foreach (string line in searchLines)
{
int my1stPosition = richTextBox1.Find(line);
if (my1stPosition > 0)
{
richTextBox1.SelectionStart = my1stPosition;
richTextBox1.SelectionLength = line.Length;
richTextBox1.SelectionFont = fnt;
richTextBox1.SelectionColor = Color.CadetBlue;
}
}
}
如果您仍想搜索整个字符串,IndexOf
请在RichTextBox.Text
属性上使用:
string searchLines = $"Line 2\nLine 3";
(...)
int my1stPosition = richTextBox1.Text.IndexOf(searchLines);
推荐阅读
- python - 嵌套列表中的列表合并
- linux - 如何使用 devm_regulator_get 处理错误
- matlab - 在 Matlab 上找到一个交点
- c# - C# Solr 查询,Boost 不起作用
- apache-flink - 为什么上次匹配事件的摄取时间和 CEP 匹配并触发模式的时间之间的时间如此之长?
- reactjs - react-virtualized Masonry 服务器渲染输出与客户端渲染不匹配
- google-analytics - 使用 Google Analytics 跟踪虚拟综合浏览量时,主(根)路径的正确路径名是什么?
- c++ - 无法使用 C++ 代码对 MongoDB 进行身份验证
- css - Vuetify 图标不在按钮内居中
- ios - 'touchIDLockout' 在 iOS 11.0 中被弃用:使用 LAErrorBiometryLockout