编辑列表框项的行

时间:2016-03-11 17:59:27

标签: vb.net listbox streamreader readline

'我有一个列表框,我将文本文件的多行复制到。我想删除每个列表项的前20个字符。我还希望在使用新行更新源文件时更新列表框的内容。列表框可能会替换我的文本框。任何帮助将不胜感激。

Try
        Dim StrmRdr As New StreamReader("C:\Users\e70605\Desktop\alarms.txt")
        Dim word As String = ""
        Dim words(9999) As String


        Dim i As Integer = 0

        'this Do Until Loop was for a Listbox I initially started with
        Do Until StrmRdr.Peek = -1
            'catch a word at a time file file
            word = StrmRdr.ReadLine()

            'send readline into words
            words(i) = word

            'tell where the word should go to 
            ListBox1.Items.Add(words(i))

            'go to the next line. until lines are finished.
            i = i + 1

        Loop

2 个答案:

答案 0 :(得分:0)

在此行private static List<Sale> sales; static { sales = new ArrayList<>(); } 之后放置此行word = StrmRdr.ReadLine()这将使您只读到读入行的最后一部分。word = word.SubString(20, word.Length - 20)在处理字符串时是一件好事。 SubString MSDN

下一部分有点棘手。您需要设置一个计时器来扫描文件以查看它是否已更改。我会检查文件信息,看看自从读入新数据以来上次修改日期/时间是否已更改。这意味着您必须跟踪上次修改的日期/时间。

旁注:

我不会使用数组来读取文件的行。我建议使用List。定义List的方式是这样Substring() 然后将新元素添加到刚刚使用的列表dim myList as new List (Of String)。有关详细信息,请参阅List MSDN

答案 1 :(得分:0)

您如何知道文件何时更新?

如果您的程序控制更新,那么您可以在每次更新时重建列表框。只需添加一个函数来重建列表框并作为更新的一部分进行调用。

如果文件可以由您控制之外的进程更新,无论是其他程序还是使用记事本等编辑的用户,那么正如jagler所说,您必须创建计时器并定期检查更新。存储您在某处读取文件的时间。每次计时器触发时,调用File.GetLastWriteTime并将文件的最后写入时间与上次读取的时间进行比较。如果它更新,请重新读取并更新上次读取时间。

在用户查看屏幕时,您是否真的需要动态更新列表框?我不知道你的申请。我几乎总是如果不总是在绘制屏幕时获取最新数据。如果用户关闭窗口并重新打开,或者在Web应用程序刷新窗口的情况下,则重新阅读。偶尔使用桌面应用程序,我会创建一个“刷新”按钮。