richTextBox不会将选择中的子字符串替换为另一个字符串

时间:2018-04-10 07:52:27

标签: c# winforms richtextbox

这是我的代码:

if (richTextBox1.SelectedText.Length > 0)
{
      for (int i = 0; i<=richTextBox1.SelectedText.Length-8;i++)
      {
           if (richTextBox1.SelectedText.Substring(i, 7) == "http://")
           {
              richTextBox1.Select(i, 7);
              richTextBox1.SelectedText = "";
              richTextBox1.DeselectAll();
          }
      }
}

这适用于button click事件。它类似于“删除格式”选项。用户应该从richTextBox中选择某个区域,程序应该查找超链接(以“http://”开头的东西)并从中删除“http://”。它有效,但并非总是如此。有时它会替换richTextBox中的随机文本,而不是替换我想要的字符串。 我该怎么办?

2 个答案:

答案 0 :(得分:0)

如果您只需要从选择中替换给定的文本,那么想知道为什么要迭代所有文本?

通过这种方式替换文字会出现什么问题?

if (richTextBox1.SelectedText.Length > 0)
{
 string selectedText = richTextBox1.SelectedText;
 string replacedText= selectedText.Replace("http://", "");
 richTextBox1.SelectedText = replacedText;

richTextBox1.DeselectAll();
}

答案 1 :(得分:0)

如果您只需要替换一种模式,那么您的代码可能只是:

string pattern = "http://";

if (richTextBox1.SelectedText.Length > 0)
    richTextBox1.SelectedText = richTextBox1.SelectedText.Replace(pattern, string.Empty);

如果您有多个模式并且模式很简单(只是文本),则可能是:

string[] Patterns = new string[] { "https://", "http://" };

if (richTextBox1.SelectedText.Length > 0)
{
    string text = richTextBox1.SelectedText;
    richTextBox1.SelectedText = Patterns.Select(s => text = text.Replace(s, string.Empty)).Last();
}

如果您有多个模式且模式更复杂,则可以使用Regex.Replace。这样的事情:

using System.Text.RegularExpressions;

string[] Patterns = new string[] { "https://", "http://" };

if (richTextBox1.SelectedText.Length > 0)
{
    string text = richTextBox1.SelectedText;
    richTextBox1.SelectedText = Patterns.Select(s => (text = Regex.Replace(text, s, string.Empty, RegexOptions.IgnoreCase))).Last();
}