【问题标题】:How to refresh OpenFileDialog .txt file in Label (VB)?如何在标签(VB)中刷新 OpenFileDialog .txt 文件?
【发布时间】:2015-01-27 19:17:21
【问题描述】:

我的 VB 应用程序应该使用 StreamReader 读取文本并在标签中显示 .txt 文件内容:

Private Sub FileLocationButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileLocationButton.Click
    OpenFileDialog1.ShowDialog()
End Sub

Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    If OpenFileDialog1.FileName <> "" Then
        Dim SR As New StreamReader(OpenFileDialog1.FileName)

        Do Until SR.EndOfStream
            Label6.Text = Label6.Text & SR.ReadLine & vbCrLf
        Loop
        SR.Close()
    End If
End Sub

我正在 MS Word 等中编写和保存文本文件,并希望在 vb 应用程序中查看文件(文本)的更新版本。
所以: 我添加了一个计时器,想知道什么代码允许应用程序每 3 秒用它的新文本(来自 .txt 文件)刷新标签,以便我刚刚在 MS Word/记事本等中输入的新内容将显示?

【问题讨论】:

  • 不要使用计时器,因为它可以告诉您文件何时更改。使用 FileSystemWatcher。
  • 我是 VB 的新手,如果您能使用 FileSystemWatcher 给我相应的代码,我将不胜感激。

标签: vb.net timer updates streamreader


【解决方案1】:

您可以使用计时器来刷新标签中的文本。在表单设计器中,将 Timer 从工具箱拖到主表单 (Form1) 上。将 FilePath 属性添加到您的首选项表单 (Preferences1) 并使用它来存储在 OpenFileDialog 中选择的路径。当您显示首选项表单时,将其路径保存在主表单的类级别变量中,并以 3000 的间隔启动计时器(这是毫秒,所以 3000 是 3 秒)。在计时器 Tick 事件中,再次读取文件并替换标签中的文本。请注意,以下代码使用 File.ReadAllText 在一个语句中读取文件(并关闭它)。

在主窗体 (Form1) 中有此代码

Private textFile As String

Sub PrefButton_Click(sender As Object, e As EventArgs) Handles PrefButton.Click
    Using pref As New Preferences1 
        pref.ShowDialog
        textFile = pref.FilePath 
    End Using
    If textFile <> "" Then Label6.Text = File.ReadAllText(textFile)
    Timer1.Interval = 3000
    Timer1.Start 
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) _
  Handles Timer1.Tick
    If textFile <> "" Then Label6.Text = File.ReadAllText(textFile)
End Sub

在首选项表单 (Preferences1) 中,您有此代码

Private myPath As String
Public ReadOnly Property FilePath As String
    Get
        Return myPath
    End Get
End Property 

Private Sub FileLocationButton_Click(sender As Object, e As EventArgs) _
  Handles FileLocationButton.Click
    If OpenFileDialog1.ShowDialog = DialogResult.OK Then 
        myPath = OpenFileDialog1.FileName
    End If
End Sub

【讨论】:

  • 感谢您提供 Blackwood 代码,但是我忘记提及的一件事是我现在有两个表单,主表单 (Form1) 和首选项表单 (Preferences1)。我在“Label6.Text = File.ReadAllText(textFile)”上收到一个错误(黄色突出显示),说“值不能为空。参数名称:路径”ArgumatNullException 未处理。我将计时器放在 Form1 还是 Preferences1 上?偏好关闭时会更新吗?
  • 你的意思是在preferences表单中选择了文件,但是标签在主表单(Form1)中?如果是这样,哪个表单是启动表单(在您的应用程序启动时加载的那个)以及它如何显示另一个表单。您可能应该将文件路径设为主表单的公共属性;如何从首选项表单中更新取决于它们各自的显示方式。
  • 正确,启动表单是表单 1,通过上下文菜单条访问首选项 1 菜单。在首选项中选择 txt 文件时。然后就是应该在启动窗体(主窗体/form1)上显示并刷新Label6中的文件内容。我需要每 3 秒用新文本更新标签的代码,并且不会因为我在之前的评论中写的内容而崩溃。我的整个应用程序都依赖于最后一部分。
  • 好的。我已经更新了我的答案,以在用户选择文本文件的首选项表单和标签所在的主表单之间拆分代码。请注意,我假设您将首选项称为对话框(使用 ShowDialog),但如果您将其称为常规表单(使用 Show),则相同的方法应该有效。
  • 我在最后一个代码(首选项)中遇到 2 个错误:错误 1 ​​没有“ReadOnly”或“WriteOnly”说明符的属性必须同时提供“Get”和“Set”。错误 2 语句不能出现在属性正文中。假定属性结束。
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多