Benutzer mit den meisten Antworten
Label-Text auf der Form von einem untergeordneten Objekt aus ändern

Frage
-
Moin,
das hier ist sicherlich eine Anfängerfrage.
Ich habe eine Anwendung in VB.NET geschrieben und möchte eine Art Fortschrittsinformation an die Hauptform übertragen.
Es existiert eine Hauptform (also ein Form-Objekt). Über einen Button wird ein Objekt erzeugt, das den Kernprozess abarbeitet. Dieses Objekt soll Zwischenstandsmeldungen an die Form schicken, um dort per Label den aktuellen Bearbeitungsstandt zu kommunizieren.
Wie wird so etwas geschickter Weise in VB.NET gelöst?
Vielen Dank für die Unterstützung!
MFG
Antworten
-
Hallo,
was ist bitte ein "Kernprozess"?
Deine Formulierung macht es schwierig, Dein Ansinnen vollständig zu verstehen.
Grundsätzlich sind für Nachrichten zwischen unterschiedlichen Instanzen Ereignisse das Mittel der Wahl.
Definiere für Dein "Objekt" ein Ereignis dass den Fortschritt der Verarbeitung signalisiert.
Dass kann nun Dein Hauptformular beim Erstellen abbonnieren (AddHandler) und damit das Label aktualisieren.
Sobald die Verarbeitung beendet ist, solltest Du die Ereignisbehandlung entfernen (RemoveHandler),
so dass das "Objekt" freigegeben werden kann.
Für konkreten Code müsste man mehr über das Objekt und die Art der Benachrichtigungen wissen.
Gruß Elmar- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 4. Januar 2010 12:28
- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 24. Januar 2010 14:52
-
Guten Abend,
wie Herr Boye sehe ich einmal die Möglichkeit über die Ereignisbehandlung:
''' Your code here ' This one is a nested class. Private Class CoreProcess Public Event UpdateMainFormLabel(ByVal strYourMessage As String) Public Sub StartCoreProcess() Dim strUpdateMessage As String ' Your code here RaiseEvent UpdateMainFormLabel(strUpdateMessage) ' Your code here End Sub End Class Private WithEvents cpYourCoreProcess As CoreProcess Private lblYourLabel As New System.Windows.Forms.Label ' Event generating button Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click cpYourCoreProcess = New CoreProcess() cp.StartCoreProcess() End Sub Private Sub cpYourCoreProcess_UpdateMainFormLabel(Byval strYourMessage As String) Handles cpYourCoreProcess.UpdateMainFormLabel lblYourLabel.Text = strYourMessage End Sub ''' Your code here
oder Sie machen es sich etwas einfacher und übergeben das Label direkt an Ihren Kernprozess und dort wird dieses Label dann mit Aktualisierungsinformationen versorgt:
''' Your code here ' This one is a nested class. Private Class CoreProcess Public Sub StartCoreProcess(ByRef lblYourLabel as System.Windows.Forms.Label) Dim strUpdateMessage As String ' Your code here lblYourLabel.Text = strUpdateMessage ' Your code here End Sub End Class Private cpYourCoreProcess As CoreProcess Private lblYourLabel As New System.Windows.Forms.Label ' Event generating button Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click cpYourCoreProcess = New CoreProcess() cp.StartCoreProcess(lblYourLabel) End Sub ''' Your code here
Beste Grüße.- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 4. Januar 2010 12:28
- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 24. Januar 2010 14:52
Alle Antworten
-
Hallo,
was ist bitte ein "Kernprozess"?
Deine Formulierung macht es schwierig, Dein Ansinnen vollständig zu verstehen.
Grundsätzlich sind für Nachrichten zwischen unterschiedlichen Instanzen Ereignisse das Mittel der Wahl.
Definiere für Dein "Objekt" ein Ereignis dass den Fortschritt der Verarbeitung signalisiert.
Dass kann nun Dein Hauptformular beim Erstellen abbonnieren (AddHandler) und damit das Label aktualisieren.
Sobald die Verarbeitung beendet ist, solltest Du die Ereignisbehandlung entfernen (RemoveHandler),
so dass das "Objekt" freigegeben werden kann.
Für konkreten Code müsste man mehr über das Objekt und die Art der Benachrichtigungen wissen.
Gruß Elmar- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 4. Januar 2010 12:28
- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 24. Januar 2010 14:52
-
Guten Abend,
wie Herr Boye sehe ich einmal die Möglichkeit über die Ereignisbehandlung:
''' Your code here ' This one is a nested class. Private Class CoreProcess Public Event UpdateMainFormLabel(ByVal strYourMessage As String) Public Sub StartCoreProcess() Dim strUpdateMessage As String ' Your code here RaiseEvent UpdateMainFormLabel(strUpdateMessage) ' Your code here End Sub End Class Private WithEvents cpYourCoreProcess As CoreProcess Private lblYourLabel As New System.Windows.Forms.Label ' Event generating button Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click cpYourCoreProcess = New CoreProcess() cp.StartCoreProcess() End Sub Private Sub cpYourCoreProcess_UpdateMainFormLabel(Byval strYourMessage As String) Handles cpYourCoreProcess.UpdateMainFormLabel lblYourLabel.Text = strYourMessage End Sub ''' Your code here
oder Sie machen es sich etwas einfacher und übergeben das Label direkt an Ihren Kernprozess und dort wird dieses Label dann mit Aktualisierungsinformationen versorgt:
''' Your code here ' This one is a nested class. Private Class CoreProcess Public Sub StartCoreProcess(ByRef lblYourLabel as System.Windows.Forms.Label) Dim strUpdateMessage As String ' Your code here lblYourLabel.Text = strUpdateMessage ' Your code here End Sub End Class Private cpYourCoreProcess As CoreProcess Private lblYourLabel As New System.Windows.Forms.Label ' Event generating button Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click cpYourCoreProcess = New CoreProcess() cp.StartCoreProcess(lblYourLabel) End Sub ''' Your code here
Beste Grüße.- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 4. Januar 2010 12:28
- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 24. Januar 2010 14:52