0

私のリストボックスの最初の項目が存在するまで、ファイルシステムウォッチャーはトリガーされません。ただし、リストボックスにリストされているファイルはその順序では作成されません。

さらに説明...

テキストボックスに入力された値を取得し、その値をリストボックスに追加して、画像ボックスでその値の横にあるアイコンを変更しています。アイコンは、PDF がまだ作成されていないことをユーザーに警告します。

    ListBox1.Items.Add(TextBoxTicketID.Text)

    If CStr(ListBox1.Items(0)) = TextBoxTicketID.Text Then
        PictureBoxStatus1.Image = My.Resources.Orange_Information
    ElseIf (ListBox1.Items(1)) = TextBoxTicketID.Text Then
        PictureBoxStatus2.Image = My.Resources.Orange_Information
    ElseIf (ListBox1.Items(2)) = TextBoxTicketID.Text Then
        PictureBoxStatus3.Image = My.Resources.Orange_Information
    End If

    TextBoxTicketID.Text = ""

    Call CheckPDFs()

以下は、現在PDFが作成されているかどうかを確認する方法です。

最終的に、msgbox があるプライベート サブで、ID の横にあるアイコンを緑色のチェック マークに更新して、PDF が作成されたことを示します。

Public Sub CheckPDFs()
    Dim x As Integer
    Dim Watcher As New FileSystemWatcher()
    Watcher.Path = "C:\Temp\"
    Watcher.NotifyFilter = (NotifyFilters.Attributes)
    Watcher.Filter = ListBox1.Items(x) + ".pdf"

    AddHandler Watcher.Changed, AddressOf OnChanged

    Watcher.EnableRaisingEvents = True
End Sub

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

テストを実行すると、リストボックスに入力された 2 つの一意の ID が作成されました。

問題 1: 最初に入力した ID で手動で PDF を作成しましたが、何もトリガーされません。PDFをディレクトリから移動して、msgboxをトリガーする前に戻す必要があります。

問題 2: 2 つの ID を入力した場合、2 番目の ID を手動で作成すると、何もトリガーされません。ファイルをディレクトリから移動して戻しましたが、まだトリガーされていません。

その後に入力された ID をトリガーする前に、最初の ID が存在する必要があるのはなぜですか?

編集

これは、ユーザーが入力する前と入力した後の 2 つのスクリーンショットで、入力された ID とアイコンを示しています。

Before_IDs_Entered

After_IDs_Entered

4

1 に答える 1

1

コードには、Watcher.NofityFilterがどのように設定されているかが示されていません。ファイルの書き込みが終了し、使用できる状態になったときにイベントを発生させる場合は、次のように設定する必要があります。

Watcher.NotifyFilter = NotifyFilters.Attributes;

Watcher.Created次に、リストしたイベントを削除します。だけにしたいChanged。それ以外の場合は、2つのイベントを受け取ります。1つはゼロバイトで作成されているファイル用で、もう1つはファイルの書き込みが完了したとき用です。私はあなたがファイルが書き込まれ終わったときだけ気にかけると信じています。

于 2012-09-12T13:36:27.360 に答える