none
Label-Text auf der Form von einem untergeordneten Objekt aus ändern RRS feed

  • 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
    Mittwoch, 30. Dezember 2009 22:23

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
    Donnerstag, 31. Dezember 2009 10:14
    Beantworter
  • 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.
    Samstag, 2. Januar 2010 19:17

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
    Donnerstag, 31. Dezember 2009 10:14
    Beantworter
  • 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.
    Samstag, 2. Januar 2010 19:17
  • Hallo devTransformer,

    Haben Dir die Antworten geholfen?

    Grüße,
    Robert

    Montag, 4. Januar 2010 12:27
    Moderator
  • Hallo devTransformer,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Sonntag, 24. Januar 2010 14:52
    Moderator