【问题标题】:Edit Lines of list box items编辑列表框项目的行
【发布时间】:2016-03-11 17:59:26
【问题描述】:

'我有一个列表框,我将多行文本文件复制到其中。我想删除每个列表项的前 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

【问题讨论】:

  • 您忘记描述问题并提出问题。
  • 你好 Plutonix。我没听清楚,拜托。

标签: vb.net listbox streamreader readline


【解决方案1】:

在这行word = StrmRdr.ReadLine() 之后放这行word = word.SubString(20, word.Length - 20) 这样你就可以读入这行的最后一部分。Substring() 是在处理字符串时要知道的一件好事。 SubString MSDN

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

旁注:

我不会使用数组来读取文件的行。我建议使用列表。定义 List 的方式就是dim myList as new List (Of String) 然后将一个新元素添加到您刚刚使用myList.Add("new String") 的列表中。欲了解更多信息,请参阅List MSDN

【讨论】:

  • 技术性:你不需要 word.substring(20,word.length-20)。你可以说 word.substring(20)。如果你只给一个参数,子字符串从给定位置到结尾。
  • 没错,我只是更喜欢保持统一,我想这比什么都更偏好。
  • 非常感谢@Jay 和 Jagler。列表框需要动态更新。我希望新行(添加到源文件)将附加到列表框的底部。其次,我有一个计时器,当它被触发时,会使下一个列表项成为“listbox.selecteditem”。我想要一个代码,如果源文件的一行包含某些单词(例如“低于标准杆”),则不应将其添加到列表项中,或者 selectedindex 应为下一个。
  • ListBox1.Items.Add() 会将新行附加到列表框的底部。要检查以确保该项目不在列表中,您只需使用ListBox1.Items.Contains(),它会返回一个布尔值。要回答您的题外话问题,只需使用逻辑来查看您是否不会添加该项目或者是否应该接下来选择它。通过选择下一个,您是尝试插入列表框中的某个位置,还是尝试跟踪项目的选择顺序以点击按钮并将其转到列表框中的特定项目?
  • 对于“离题问题”,我使用 RemoveAt 属性解决了它。非常感谢。我猜你在暗淡的 myList 上的回答是 new list (Of String) ... myList.add("new string") 应该可以解决问题。然而,我无法做到这一点。也许阅读 MSDN 列表让我更加困惑。对不起,如果我听起来令人不安或不太聪明。我是编程新手,很高兴能得到像你这样的人的帮助。
【解决方案2】:

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

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

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

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

【讨论】:

  • 非常感谢 Jay 和 @jagler。列表框需要动态更新。我希望新行(添加到源文件)将附加到列表框的底部。
猜你喜欢
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多