0

次のコードは、テキストボックスに値を入力し、その値をリストボックスに追加し、その横にある画像ボックスを更新し、テキストボックスを空白にして、ユーザーがリストボックスに値を追加できるようにする方法を示しています。

    ListBox1.Items.Add(TextBoxTicketID.Text)

    If CStr(ListBox1.Items(0)) = TextBoxTicketID.Text Then
        PictureBoxStatus1.Image = My.Resources.Orange_Information
    End If

    TextBoxTicketID.Text = ""

リストボックスに入力された値に基づいてPDFを作成する、ここに示されていない別のプロセスがあります。

PDFが存在するかどうかを特定のディレクトリでチェックするループに問題があります。PDFが存在する場合は、画像ボックスを別の画像に変更します。

これが私が使用していたループですが、私が遭遇した問題は、最初の値が存在しない限り、ユーザーが2番目の値を入力できないことでした。

Loop Until My.Computer.FileSystem.FileExists("c:\Temp\" + ListBox1.Items(0) + ".pdf")
PictureBoxStatus1.Image = My.Resources.Green_Checkmark

したがって、理論的には、リストボックスにX個の値を入力し、ファイルが存在するかどうかを確認し、存在する場合は必要な画像を変更できるようにする必要があります。

編集

これが私がやったことです...しかしうまく機能しているようです...

    ListBox1.Items.Add(TextBoxTicketID.Text)

    If CStr(ListBox1.Items(0)) = TextBoxTicketID.Text Then
        PictureBoxStatus1.Image = My.Resources.Orange_Information
    End If

    TextBoxTicketID.Text = ""
    Call CheckFiles()

パブリックサブを追加しました

    Public Sub CheckSpooling()
    Dim Watcher As New FileSystemWatcher()
    Watcher.Path = "C:\Temp\"
    Watcher.Filter = ListBox1.Items(0) + ".pdf"

    AddHandler Watcher.Created, AddressOf OnChanged

    Watcher.EnableRaisingEvents = True
    End Sub

次に、ファイルが追加された場合に必要なものを実行するためのサブ。テストにはmsgboxを使用しました。

    Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
    ' Specify what is done when a file is created.
    MsgBox("File has been created!")
    End Sub
4

2 に答える 2

3

FileSystemWatcherをチェックしてください

于 2012-09-11T17:20:10.970 に答える
1

ループ中にユーザーが何も入力できない理由は、WinFormフレームワークが基本的にシングルスレッドであるためです。UIのすべては、イベントハンドラーを含め、同じスレッドで発生します。したがって、ボタンクリックイベントハンドラーで長時間ループに座っていると、コードがループを終了するまでUIがロックされ、応答しなくなります。これを回避する方法は、新しいスレッドを開始して、実行する必要のあるすべての作業を実行することです。そのワーカースレッドは、完了する必要がある限り時間がかかる可能性があり、UIスレッドに干渉しないため、UIの応答性は維持されます。BackgroundWorkerこれは、フォームデザイナでフォームにドロップできるコンポーネントによって簡単になります。

ただし、FileSystemWatcherDan-oが推奨しているように、ファイルが存在するかどうかをチェックし続ける独自のワーカースレッドを作成するよりも、おそらくより良い解決策です。車輪の再発明を回避するだけでなく、より効率的になります。ファイルが存在するかどうかを常にファイルシステムに尋ねるのではなく、ファイルシステムからのメッセージをリッスンして、変更がいつ発生したかを確認します。

于 2012-09-11T17:28:36.340 に答える