SOG-Helpcenter Logo SOG Business - Software

Meldungsverarbeitung


In der Active Skin Oberfläche können Controls nur anhand Meldungen miteinander kommunizieren. Diese Meldungen können von den Controls sowohl gesendet als auch empfangen werden. Auch in Dialogklassen können diese Meldung an Controls versendet und von Controls empfangen sowie weiterverarbeitet werden.

 

Um das Erzeugen von Meldungen zu vereinfachen und zu verallgemeinern, wurden zusätzlich "Connector" Klassen entwickelt. Diese Connectoren kapseln due Funktionalität der Kommunikation mit den entsprechenden ActiveSkin Controls. Außerdem stellt die Verwendung der Connectoren eine Dokumentation dar, welche ActiveSkin Controls (in etwa) auf der Maske zu konfigurieren sind. Zusätzlich kann due Definition der Connectoren und Verwendung entsprechender Attribute dafür gesorgt werden, dass der Anwender beim Designen der Maske dahingehend unterstützt wird, dass er die entsprechenden Controls mit nur wenigen Mausklicks korrekt implementiert.

 

Darüber hinaus werden Nachrichten aber auch von Controls an die Verarbeitungsmaske gesendet, und können dort abgefragt werden, um bestimmte Verarbeitungen zu ermöglichen.

Empfangen von Meldungen


Meldungen, die durch Controls oder Dialogklassen in Umlauf gebracht werden, können in Dialogklassen abgefangen und weiterverarbeitet werden. Zu diesem Zweck muss die Methode "OnHandleMessage" der Klasse "SOGDialogMask", von der alle Dialogklassen abgeleitet werden, in der Dialogklasse selbst überschrieben werden:

protected override void OnHandleMessage(object sender, SOGMessageEventArgs e)

 
Diese Methode bekommt als Parameter "sender" vom Typ "object" und die eigentliche Meldung "e" vom Typ "SOGMessageEventArgs" übergeben. Da nicht nur Controls diese Meldungen absetzen können, sondern auch die Active Skin Oberfläche selbst Meldungen produziert, sollte in dieser Methode möglichst immer ein bestimmter Meldungstyp mit einem bestimmten Empfänger oder Absender abgehandelt werden.

Beispiel:

    protected override void OnHandleMessage(object sender, SOGMessageEventArgs e)

    {

        if (e is SOGObjectSelectedMessageEventArgs msg)
        {
            if (msg.Obj is Lagerplatz lp)
            {
                m_lgp = lp.m_lgp;
                this.BufferToControls( nameof(m_lgp) );
            }
        }
    }

Dieses Beispiel verwendet eine Meldung des Typs "SOGObjectSelectedMessageEventArgs". Dieser Meldungstyp wird unter anderem dann von einem Control gesendet, wenn ein Objekt in einer ObjectList oder in einem ObjectTree selektiert wird. Neben den Parametern "Absender" und "Empfaenger" wird diesem Meldungstyp ein weiterer Parameter "Obj" vom Typ "object" übergeben, das das selektierte Objekt (in diesem Fall der Klasse "Lagerplatz") enthält.

In der ersten Bedingung wird überprüft, ob der empfangene Meldungstyp vom Typ "SOGObjectSelectedMessageEventArgs" ist. Falls die Meldung von diesem Typ ist, wird in einer zweiten Bedingung überprüft, ob das selektierte Objekt vom Typ "Lagerplatz" ist. Wenn auch diese Bedingung "wahr" ist, wird die Lagerplatznummer in das Maskenfeld "m_lgp" geladen und dafür gesorgt, dass dieses Feld auf der Maske aktualisiert wird.