Datenaustauisch zwischen Custom Control und Mainform

  • VB.NET
  • .NET (FX) 4.0

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Vielen Dank für den Response,

    hat mir erst mal weitergeholfen.

    Warum das ganze Fass überhaupt:
    Ich habe eine Anwendung die 24 externe Anzeigeeinheiten anspricht. Diese 24 Anzeigen werden von einem 24 CustomControls (CC)angesteuert und mit Daten versorgt.
    Dabei werden die Anzuzeigenden Daten in der Mainform erzeugt und sollen dann jeweils an die einzelnen 24 CC zur Weiterleitung an die Displays übergeben werden.

    Natürlich ist es ohne weiteres möglich ein Datenarry jeweils in der Mainform und in der jeweiligen CC (als public) zu definieren und es getriggert aus der Mainform jeweils in das CC zu übergeben.

    Dazu muss meines Wissens nach aber die Variable jeweils in der Mainform als auch in der CC definiert sein und dann auch immer beide Seiten einzeln gepflegt werden.
    Mir schwebt so etwas wie eine class vor bei der es möglich ist in der Mainform die Class zu erweitern und damit dann auch einen lesenden Zugriff in der CC auf ein Member der Class in der Mainform zu bekommen und die Daten dann an das jeweilige Display durchreichen zu können.

    der Vorschlag von VaporiZet - Übergabe der Mainform als Parameter ans CC werde ich mal versuchen zu verstehen,

    der Vorschlag von "Erfinder des Rades" - globales statisches Datenmodel versuche ich auch noch nachzuvollziehen.

    Wenn das große Netz für ich dazu kein Beispiel bereithält würde ich hier nochmal dazu nachfragen.
    Erst mal Danke an Euch, J

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „janbronner“ ()

    Das einfachste (nicht zwangsläufig das beste!) wäre wohl ein Public Module, welches passende Variablen zur Verfügung stellt, die jeder Zugreifer ohne Instanziierung einer weiteren Klasse einsehen/ändern kann. Alternativ ne Public Class mit Shared Variablen. Dann kommt man nicht in die Verlegenheit, die Variablen ohne Klassenname zu verwenden und dann irgendwann die Übersicht zu verlieren, woher die Variablen kommen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ich nehme ja immer typDataset als Datenmodell.
    Das kann man ja um UserCode erweitern, der dann in der Dataset-Klasse angesiedelt ist.
    Und da mache ich eine Readonly Public Shared Dts As <myDataset> - Variable hinein, die ich im Shared Konstruktor erstelle.
    So hab ich mein eines typDataset inne ganzen Anwendung verfügbar.
    Ich registriere auch alle Forms dadrauf. So habich mein Datenmodell unabhängig vom Gui an einer definierten Stelle, wo ich es auch beliebig erweitern kann.
    In AdvancedPainting kann man sowas angugge.
    Ob das ein gutes Sample zur Verdeutlichung des Konzepts ist bezweifel ich. Weil dort liegt der Schwerpunkt auf Erweiterung des Datasets, und mehrere Forms und UserControls kommen garnet vor.
    Ich habe mich mit dem Thema weiter beschäftigt, bin aber leider doch nicht zu einem wirklich befriedigenden Ergebnis gekommen.

    Ich bin jetzt den Weg gegangen, die Daten direkt aus der main-anwendung an Variablen der custom control zu übergeben.

    d.H.:

    in der Main Anwendung:


    VB.NET-Quellcode

    1. Dim D_C_P_HMI_Status_step_Programm() = {Display_Com_Port1.HMI_status_step_pogramm(i2, I), Display_Com_Port2.HMI_status_step_pogramm(i2, I), Display_Com_Port3.HMI_status_step_pogramm(i2, I), Display_Com_Port4.HMI_status_step_pogramm(i2, I)}
    2. for i = 0 to 3
    3. for i2 = 0 to 23
    4. for i3 =0 to 3
    5. D_C_P_HMI_Status_step_Programm(i3) = status_step_pogramm(i2, I)
    6. next
    7. next
    8. next


    VB.NET-Quellcode

    1. in der Custom Control dann
    2. dim text_box() = {text_box1, textbox_2, ....., textbox_23}
    3. text_box().text = status_step_pogramm(i2, I)


    Ihr seht das wird ganz ordentlich unübersichtlich. Hat aber einfach damit zu tun, dass 24 Anzeigeeinheiten zentral von einem Rechner mit Informationen Versorgt werden (diese werden dann physisch per profinet an die HMI-Displays gesendet)

    jetzt kommt aber noch das eigentliche problem:

    wenn ich die Vriable

    VB.NET-Quellcode

    1. Dim D_C_P_HMI_Status_step_Programm() = {Display_Com_Port1.HMI_status_step_pogramm(i2, I), Display_Com_Port2.HMI_status_step_pogramm(i2, I), Display_Com_Port3.HMI_status_step_pogramm(i2, I), Display_Com_Port4.HMI_status_step_pogramm(i2, I)}


    deklariere entsteht eine neue, unabhänige Variable und die Daten werden nicht auf die Variablen der Untergeordneten CC geschrieben - damit entsteht ein riesiger textverhau.
    momentan funktioniert nur das wirklich sicher

    VB.NET-Quellcode

    1. Display_Com_Port1.HMI_status_step_pogramm(i2, I) = status_step_pogramm(i2, I)
    2. Display_Com_Port2.HMI_status_step_pogramm(i2, I) =status_step_pogramm(i2, I)
    3. Display_Com_Port3.HMI_status_step_pogramm(i2, I)=status_step_pogramm(i2, I)
    4. Display_Com_Port4.HMI_status_step_pogramm(i2, I)=status_step_pogramm(i2, I)


    was (wenn man insgesamt 24 unter CC hat auf die jeweils 12 Variablen übergeben werden) einen gigantischen Textverhau ergibt.

    gibt es nicht so etwas wie shared variablen oder pointer bei denen ich einmal schreibe und alle untergeordneten Variablen greifen auf den gleichen Speicherbereich zu?

    Ich komme leider mit den bisherigen Vorschlägen nicht weiter.

    Danke,

    JB

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „janbronner“ ()

    janbronner schrieb:

    gibt es nicht so etwas wie shared variablen
    Ja, das gibts - Schlüsselwort hast du selbst genannt: Shared.
    Wird bei mehreren Shared Variablen nur sehr unübersichtlich, deshalbhabich ja angefangen zu labern von einem Datenmodell, was Public Shared installiert ist.
    Das ist dann nur eine Shared Variable mit allem drin.
    Also Stichwort Datenmodell ist die Crux - eine Klasse, die alle deine Daten aufnimmt und verwaltet.
    Wie gesagt: ich nehm dafür am liebsten typisiertes Dataset, da kann ich das Modell im Dataset-Designer schön aufbauen, und bekomme ungefähr das gesamte Leistungsspektrum von Databinding geschenkt.