我正在尝试用富文本框中的行填充组合框。但是,仅当富文本框中的行的最后6个字符包含字符串“ device”时。我不知道富文本框中的行数以及包含字符串“ device”的行数,直到运行时为止。
假设组合框中有6行,其中2个包含字符串“ device”。但是两个数字都可以并且在运行期间确实会发生变化。
int IntCountLines等于富文本框中的行数。int IntNumberOfDevices等于在富文本框中包含字符串“ device”(最后6个字符)的行数。
富文本框中的第一行[0]始终被忽略。因此,从第[1]行开始。
如果富文本框中的第1行包含字符串“ device”,我想将其添加到组合框中。如果没有,请移至第2行并进行检查。如果其中包含字符串“ device”,则将其添加到组合框。如果不是,请移至第3行,依此类推。
int IntCountLines
int IntNumberOfDevices。
Richtextbox名称是:RtxtAdbOutput。
组合框名称是:CmbIP。
我有:
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的值匹配为止。
我正在尝试用富文本框中的行填充组合框。但是,仅当富文本框中的行的最后6个字符包含字符串“ device”时。我不知道富文本框中的行数以及包含字符串“ device”的行数,直到运行时为止。
为此,您首先需要获取控件中字符串的某种集合。为此,您可以创建一个函数以将这些行取回。
private static List<string> GetRTFLines(RichTextBox rtf) => new TextRange(rtf.Document.ContentStart, rtf.Document.ContentEnd).Text.Split('\n').Where(line => !string.IsNullOrEmpty(line) && line.Replace("\r","").EndsWith("device")).Select(field => field.Replace("\r", "").Replace("device", "")).ToList();
呼叫此:
var lines = GetRTFLines(rtxtAdbOutput);
总计:
var lines = GetRTFLines(rtxtAdbOutput); //get your list of lines that meet the criteria
// add them to the combobox if they haven't been
lines?.ForEach(line =>
{
if (!CmbIPs.Items.Contains(line))
CmbIPs.Items.Add(line);
}
);
如果要计数,lines
变量具有该值。
您可以同时使用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()
将它们分别添加到组合框中]。