progressBar   zodpovězená otázka

VB.NET, WinForms

Dobrý den,

mám aplikaci která obsahuje object "loi" třídy ListOfItems.

ListOfItems obsahuje proceduru loadXMLData.

loi.loadData(dataPath)

Uvnitř se nečítají a zpracovávají xml data.

Potřebuju nějak zobrazit progress bar, který bude vždy navrchu nad aplikací.

Příjde mi ale trochu proti oop pravidlům, abych se ve třídě ListOfItems odkazoval ven na nějakou komponentu progressBar.

Jakým způsobem se toho správně řeší?

Díky moc za pomoc.

PetrS

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

Existuje několik způsobů jak to udělat. Ten lepší je vytvořit v ListOfItems událost, která bude v parametru e vracet třídu odvozenou od EventArgs s vlastností představující stav zpracování (0-100). Ten horší způsob je v konstruktoru ListOfItems předat delegáta metody, která bude nastavovat ProgressBar.

To lepší řešení:

Class Form1
  Private WithEvents _itemList As New ItemList
  Private Sub _itemList_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs) Handles _itemList.ProgressChanged
    ProgressBar1.Value = e.Progress
  End Sub
End Class

Class ItemList
  Public Event ProgressChanged As EventHandler(Of ProgressChangedEventArgs)
  Public Sub DoSomething()
    For n As Byte = 0 To 100
      RaiseEvent ProgressChanged(Me, New ProgressChangedEventArgs(n))
      Thread.Sleep(25)
    Next
  End Sub
End Class

Class ProgressChangedEventArgs
  Inherits EventArgs
  Private _progress As Byte
  Public Sub New(ByVal progress As Byte)
    If progress > 100 Then
      Throw New ArgumentOutOfRangeException("progress")
    End If
    _progress = progress
  End Sub
  Public ReadOnly Property Progress() As Byte
    Get
      Return _progress
    End Get
  End Property
End Class

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Děkuju moc.

PetrS

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