Získání průběžných informací ze třídy - ze spuštěné procedury   otázka

VB.NET

Dobrý den, mám třídu ve které je Public Sub ProhledejVybranyAdresar(ByVal SourcePath As String) – procházení vybraného adresáře + podřízených adresářů a uložení informací o souboru z těchto adresářů do DataTable.

Ale teď k problému. Mám formulář a tuto třídu v něm použiji a chtěl bych aby se na formuláři průběžně vypisovaly informace o souborech, se kterými procedura ProhledejVybranyAdresar právě pracuje

Nevíte někdo jak na to?


Public Class TestovaciForm

Private Sub SpustitVyhledavani()
  Dim T As New SeznamSouboru
  T.ProhledejVybranyAdresar("C:\Test")
End Sub


End Class



Public Class SeznamSouboru

    Private _FileItems As Integer
    Public Property FileItems() As Integer
        Get
            Return _FileItems
        End Get
        Set(ByVal value As Integer)
            _FileItems = value
        End Set
    End Property

    Private _Message As String
    Public Property Message() As String
        Get
            Return _Message
        End Get
        Set(ByVal value As String)
            _Message = value
        End Set
    End Property


    Private _PracujiSeSouborem As String
    Public Property PracujiSeSouborem() As String
        Get
            Return _PracujiSeSouborem
        End Get
        Set(ByVal value As String)
            _PracujiSeSouborem = value
        End Set
    End Property  

  Public Sub ProhledejVybranyAdresar(ByVal SourcePath As String)
        Dim SourceDir As DirectoryInfo = New DirectoryInfo(SourcePath)

        _Message = "Provádím načtení informací o souborech ve vybrané složce a podsložkách."
        If SourceDir.Exists Then

            Dim ChildFile As FileInfo
            For Each ChildFile In SourceDir.GetFiles()
                Try
                    _PracujiSeSouborem = ChildFile.FullName
                    _FileItems = _FileItems + 1

			' provede se uložení do DataTable (Procedura není součásti této ukázky)
                    AddRow(_FileItems, ChildFile.Name, ChildFile.DirectoryName, ChildFile.Length, ChildFile.CreationTime, GetMD5Hash(ChildFile.FullName))
                Catch Ex As System.UnauthorizedAccessException
                End Try
            Next
            Dim SubDir As DirectoryInfo
            For Each SubDir In SourceDir.GetDirectories()
                ProhledejVybranyAdresar(SubDir.FullName)
            Next
        Else
            Throw New DirectoryNotFoundException("Zdrojovy adresar neexistuje: " + SourceDir.FullName)
        End If
        Try

        Catch e As System.IO.IOException
            MessageBox.Show(e.Message())
        End Try

    End Sub

End Class
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To je velmi jednoduché. V té třídě definujte vlastní událost a na tuto událost napojte handler, ve kterém se to bude vypisovat třeba do Labelu. Událost se bude vyvolávat v metodě ProhledejVybranyAdresar.

Public Class TestovaciForm
  'Deklarace seznamu včetně událostí
  Private WithEvents _seznam As New SeznamSouboru
  'Deklarativní nastavení handleru události
  Private Sub _seznam_FileFound(ByVal sender As Object, e As FileFoundEventArgs) Handles _seznam.FileFound
    'Výpis názvu souboru do Labelu
    Label1.Text = "Nalezen soubor " & e.FileName
  End Sub
End Class

Public Class SeznamSouboru
  Public Event FileFound As EventHandler(Of FileFoundEventArgs)
  Public Sub ProhledejVybranyAdresar(ByVal SourcePath As String)
    '...
    'Vyvolání události
    RaiseEvent FileFound(Me, New FileFoundEventArgs(childFile.FullName)
  End Sub
End Class

'Třída definující parametry události
Public Class FileFoundEventArgs
  Inherits EventArgs
  Private _fileName As String
  Public Sub New(ByVal fileName As String)
    _fileName = fileName
  End Sub
  'Vrací úplnou cestu k souboru
  Public ReadOnly Property FileName As String
    Get
      Return _fileName
    End Get
  End Property
End Class
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý den, děkuji za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Kod jsem implementoval, ale nefunguje to. Když pustím krokování kodu, v proceduře Public Sub ProhledejVybranyAdresar(ByVal SourcePath As String) přijdu na RaiseEvent FileFound(Me, New FileFoundEventArgs(ChildFile.FullName)) , a předpokládám, že by mě to mělo přesunout do třídy DuplicitniSoubory a spustit Public Sub _seznam_FileFound(ByVal sender As Object, ByVal e As FileFoundEventArgs) Handles _seznam.FileFound . To se však nestane. Samozřejmě jsem to zkoušel i bez krokování a soubory se v labelu nevypisují.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback