【问题标题】:C# Multiline Textbox: Adding a string after a line if it contains XC#多行文本框:如果一行包含X,则在行后添加一个字符串
【发布时间】:2019-04-24 20:51:20
【问题描述】:

我要做的是循环多行文本框的内容(逐行循环),如果它包含某个关键字(例如,如果该行包含单词:click())然后在下一行我会添加单词sleep(5)

循环文本框没问题:

foreach (string line in txtBoxAdd.Lines)
{
   if (line.Contains("click()"))
   {
      Helpers.ReturnMessage(line);
   }
}

我遇到的问题是如何在找到关键字 click() 之后在下一行添加单词 sleep(5)

任何帮助将不胜感激。

【问题讨论】:

  • 您是想将sleep(5) 添加到现有行中,还是添加到匹配字符串下方的新行中?另外,这是 WinForms、WPF、WebForms、...?
  • 在匹配行下方的新行上将是理想的,我正在使用 winforms :)
  • 这是一个多行文本框,我将文本行粘贴到:)
  • 您无法修改正在使用 foreach 循环进行迭代的内容,因此您必须切换到另一种方法,例如使用索引 for 循环。
  • @AhmedAbdelhameed 什么?...确实如此。

标签: c# textbox multiline


【解决方案1】:

你可以这样做:

List<string> lines = new List<string>(textBox1.Lines);

for(int i = 0; i < lines.Count; i++) 
{
   if (lines[i].Contains("click()")) 
   {
      lines.Insert(i + 1, "sleep(5)");
      i++;
   }                
}

textBox1.Lines = lines.ToArray();

请注意,它不会检查下一行是否已经存在“sleep(5)”,并且在整个处理完成之前,更改不会应用于文本框。

【讨论】:

  • 感谢 idle_Mind,它工作得很好,给了我一些工作要做。
  • 为什么插入一个新行后是i += 2?在这种情况下,for 语句的 i++ 也将执行,那么您是否有意跳过 行?
  • 你说得对,@JeppeStigNielsen,应该是i++。代码已在上面进行了编辑。
【解决方案2】:

流利版:

using System;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            txtBoxAdd.Lines = new[] { "Line 1", "Line 2", "Line 3 contains the buzzword", "Line 4", "Line 5 has the buzzword too", "Line 6" };
        }

        private void button1_Click(object sender, EventArgs e)
        {
            InsertLineAfterBuzzword(buzzword: "buzzword", lineToAdd: "line to add");
        }

        private void InsertLineAfterBuzzword(string buzzword, string lineToAdd)
        {
            txtBoxAdd.Lines = txtBoxAdd.Lines
                                       .SelectMany(i => i.Contains(buzzword) ? new[] { i, lineToAdd } : new[] { i })
                                       .ToArray();
        }
    }
}

【讨论】:

  • 我也想到了.SelectMany(i =&gt; i.Contains(buzzword) ? new[] { i, lineToAdd } : new[] { i })
  • 我喜欢它。 ...但是如果你必须修改它来检查下一行是否已经有“sleep(5)”,你会怎么做? (顺便说一句,我投了赞成票)。
  • @Idle_Mind,哦,谢谢)我会考虑的。无论如何,手动循环具有更好的性能。但我喜欢linq。如果性能不是关键因素,它看起来会更漂亮。
  • @Idle_Mind,这也是可能的,但不是最理想的dotnetfiddle.net/SwwWja
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多