C# 如果满足条件,如何使用 RichTextBox 中的字符串填充 ComboBox

C# How to populate ComboBox with Strings from RichTextBox if criteria met

我正在尝试使用富文本框中的行填充组合框。 但前提是富文本框中一行的最后 6 个字符包含字符串 "device"。 我不知道富文本框中的行数和包含字符串 "device" 的行数,直到运行时才知道。

假设组合框中有 6 行和 2 个包含字符串 "device" 的项目。 但是这两个数字都可以而且确实会在运行时发生变化。

int IntCountLines 等于富文本框中的行数。 int IntNumberOfDevices 等于富文本框中包含字符串 "device"(在最后 6 个字符中)的行数。

格式文本框中的第一行 [0] 始终被忽略。 所以,从第 [1] 行开始。

如果富文本框中的第 1 行包含字符串 "device",我想将其添加到组合框中。 如果没有,则移至第 2 行并进行检查。如果它包含字符串 "device",则将其添加到组合框中。 如果没有,则转到第 3 行,依此类推。

int IntCountLines

int IntNumberOfDevices.

富文本框名称是:RtxtAdbOutput。

组合框名称为:CmbIPs。

我有:

StrTmpOutput = rtxtAdbOutput.Lines[1].Substring(rtxtAdbOutput.Lines[1].Length - 6);

if (StrTmpOutput == "device")
{
    CmbIPs.Items.Add(rtxtAdbOutput.Lines[1].Remove(rtxtAdbOutput.Lines[1].Length - 7));
}



StrTmpOutput = rtxtAdbOutput.Lines[2].Substring(rtxtAdbOutput.Lines[2].Length - 6);

if (StrTmpOutput == "device")
{
    CmbIPs.Items.Add(rtxtAdbOutput.Lines[2].Remove(rtxtAdbOutput.Lines[2].Length - 7));
}


StrTmpOutput = rtxtAdbOutput.Lines[3].Substring(rtxtAdbOutput.Lines[3].Length - 6);

if (StrTmpOutput == "device")
{
    CmbIPs.Items.Add(rtxtAdbOutput.Lines[3].Remove(rtxtAdbOutput.Lines[3].Length - 7));
}

等等。但是直到运行时才知道行数意味着我不知道要多长时间才能继续添加 if 语句。 另外,如果它是一个空行,它会给出错误(因为它试图从一个不存在的字符串的末尾删除 7 个字符,尽管我可以进行一些错误检查来阻止它)。

有什么方法可以用 for 循环或类似的方法改进它吗?

我想继续这样做,直到添加到组合框的行数与 IntNumberOfDevices 的值匹配。

您可以结合使用 List<T>.ForEach() 方法和 String.EndsWith()

rtxtAdbOutput.Lines.ToList()
    .GetRange(1, rtxtAdbOutput.Lines.Count() - 1)
    .Where(line => line.EndsWith("device")).ToList()
    .ForEach(validLine => CmbIPs.Items.Add(validLine.Remove(validLine.Length - 7)));

这样做是获取所有索引大于 0 的行作为列表,然后使用 String.EndsWith 选择以 "device" 结尾的行,然后为每个行添加它们使用 ForEach().

到组合框

DotnetFiddle demonstrating it

String.EndsWith documentation

List.ForEach documentation