0

以下を含むテキストファイルがあります。

12 13 32 41 ; 321 433 412 234 ; ...

数値を読み取って、追加する前にそれぞれをラベルに表示しようとしています。「;」の前に数字の各セットを追加しています . 出力は次のようになります。

12+13+32+41=98。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim L As Integer
    Dim i As Integer
    Dim c As Char
    Dim res As String
    Dim file As String

    OpenFileDialog1.ShowDialog()
    path = OpenFileDialog1.FileName
    File = My.Computer.FileSystem.ReadAllText(path)
    L = File.Length
    For i = 1 To L Step 1
        c = Mid(Options.File, i)
        If c <> " " Then
            res = res & c
        Else
            Label1.Text = res
                 ' messagebox.show(res)   
            System.Threading.Thread.Sleep(100)

            res = ""
        End If
    Next
End Sub

私の問題は、ファイルの最後の番号のみが表示されることです。追記部分は載せませんでした。

Visual Basic が初めての私を助けてください

4

2 に答える 2

1

更新をゆっくりと行う場合は、ウィンドウの通常のメッセージ キューを使用して表示を更新できます。タイマーを使用して、表示内容を変更できます。UI が応答しなくなるため、Thread.Sleep() の使用はお勧めできません。このコードにより、複数のコントロールを同時に更新できます。

Class TextRevealer
Property target As Control
Property text As String

Private nChars As Integer
Private tim As Timer

Sub New(target As Control, text As String)
    Me.target = target
    Me.text = text
    nChars = 1
    tim = New Timer
    tim.Interval = 100
    AddHandler tim.Tick, AddressOf RevealText
End Sub

Sub Start()
    If tim IsNot Nothing Then
        tim.Start()
    End If
End Sub
Private Sub RevealText(sender As Object, e As EventArgs)
    target.Text = text.Substring(0, nChars)
    nChars += 1
    If nChars = text.Length Then
        tim.Stop()
        tim.Dispose()
    End If
End Sub
End Class

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Clic
    Dim txt = IO.File.ReadAllText("C:\temp\crop.txt")
    Dim txtRvlr = New TextRevealer(Label1, txt)
    txtRvlr.Start()

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim txt = IO.File.ReadAllText("C:\temp\dives.txt")
    Dim txtRvlr = New TextRevealer(Label2, txt)
    txtRvlr.Start()

End Sub
于 2013-09-21T20:37:14.343 に答える
0

Thread.Sleep(100)1秒の遅延は間違っています。スリープはミリ秒単位なので、1 秒間に 1000 が必要です。

もう 1 つの問題は、スレッドをスリープ状態にすると、フォームが再描画されないことです。試す

Label1.Text = res
Label1.Refresh  
' or maybe Label1.Update
Threading.Thread.Sleep(1000)

どちらもコントロールに再描画RefreshUpdate指示しますが、実際には描画メッセージをキューに入れるだけで、スレッドをスリープ状態にする前にメッセージを処理しない可能性があります。

もう 1 つの方法は、Timer を使用して 1 秒の時間を測定することです。

于 2013-09-21T20:19:45.687 に答える