Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在列中显示行号_Vb.net - Fatal编程技术网

Vb.net 在列中显示行号

Vb.net 在列中显示行号,vb.net,Vb.net,问题:: 如何在第二列的文件中显示行号 示例:Test.txt包含: asdasd 种皮 格特 更好 所以我搜索文本“Better”,并在第2列中显示它是在文件的第4行找到的。我认为您试图在一行中做的太多了。我把它分成两步。记住Linq是在幕后执行循环的,所以它确实不应该减慢代码的速度 在循环中更新用户界面会减慢代码的速度。我将ListViewItems累积到一个列表中,然后在循环结束后立即添加它们 通过添加行计数器来确定行号。它在内部循环中递增,对于外部循环中的每个文件重置为1。因为人类从1开

问题::

如何在第二列的文件中显示行号

示例
Test.txt
包含:

asdasd

种皮

格特

更好


所以我搜索文本“Better”,并在第2列中显示它是在文件的第4行找到的。

我认为您试图在一行中做的太多了。我把它分成两步。记住Linq是在幕后执行循环的,所以它确实不应该减慢代码的速度

在循环中更新用户界面会减慢代码的速度。我将ListViewItems累积到一个列表中,然后在循环结束后立即添加它们

通过添加行计数器来确定行号。它在内部循环中递增,对于外部循环中的每个文件重置为1。因为人类从1开始计数,所以我使用的是1,而不是计算机的计数系统从0开始

Dim files = From file In Directory.EnumerateFiles(txtFolder.Text, txtType.Text, SearchOption.AllDirectories)
From line In System.IO.File.ReadLines(file) Where line.Contains(txtFindWhat.Text) Select New With {file, line}

For Each f In files
   Dim item As New ListViewItem($"{f.file}") 'First Column File Localtion
   item.SubItems.Add($"{f}") 'Second Column Add The line number where found the text
   item.SubItems.Add($"{f.line}") 'Third Column Text Search
   ListView1.Items.Add(item) 'Add Records
Next

你知道
For
循环和
For每个
循环之间的区别吗?谢谢你提供的信息,我将尝试对此进行更多的研究,以确保它有效。
Private Sub OPCode()
    Dim files = Directory.EnumerateFiles(txtFolder.Text, txtType.Text, SearchOption.AllDirectories)
    Dim lst As New List(Of ListViewItem)
    For Each f In files
        Dim lineNumber As Integer = 1
        Dim lines = File.ReadAllLines(f)
        For Each line In lines
            If line.Contains(txtFindWhat.Text) Then
                Dim li As New ListViewItem(f)
                li.SubItems.Add(lineNumber.ToString)
                li.SubItems.Add(line)
                lst.Add(li)
            End If
            lineNumber += 1
        Next
    Next
    ListView1.Items.AddRange(lst.ToArray)
End Sub