Kommunikation zwischen mehreren Forms per Event

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    roepke schrieb:

    ist ne Klasse und keine simple Variable,
    Doch, das ist eine "simple" VAriable, nur ist List<T> ein Referenztyp und z.B. Integer ein Wertetyp.
    openbook.rheinwerk-verlag.de/v…b0044f76fb1bee00e76e4a792
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @roepke String ist da was besonderes, da wird der Konstruktor implizit aufgerufen, so dass eine gewisse Kompatibilität zu älteren Versionen und anderen Sprachen (Basic, C, C++) gewahrt bleibt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @roepke: Ja, das ist richtig. String ist ein sehr besonderer Sonderfall.
    Er verhält sich weitgehend wie eine Struct, ist aber ein Class - eine sog. "Immutable". D.H. von einem String kannste die Properties nicht ändern.
    Liegt vmtl. daran, dass Strings zig Kilobyte gross werden können, und solch ist vlt. als Struct nicht zu handeln.

    ErfinderDesRades schrieb:

    D.H. von einem String kannste die Properties nicht ändern
    Naja, geht schon, Stichwort Reflection. :D Sollte man aber schön die Finger von lassen, wenn einem die Systemstabilität am Herzen liegt.
    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.
    Hallo, ich möchte gerne diesen Thread nochmal aufgreifen.

    Folgendes ist keine generelle Verständnisfrage, sondern ich würde mich eher über eine Meinung dazu freuen:

    - Ich habe ein Form A.
    - Zur Laufzeit werden aus Form A heraus eine oder mehrere Instanzen von Form B erstellt. Das kann der Benutzer machen, die Anzahl von Form B ist also veränderbar.
    - In jedem Form B gibt es ein TabControl.
    - Auf jeder TabPage kann der Benutzer wiederrum, auch zur Laufzeit, ein UserControl A, B ODER C öffnen. Also auf jeder TabPage immer nur eins (entweder, oder)
    - Das jeweilige UserControl soll immer dann, wenn seine TabPage angeklickt wird etwas ausführen.



    - Im Moment habe ich das Event konzipiert. D.h. wird die TabPage gewechselt, feuert das Form B ein Event.
    - Alle UserControls haben dieses Event abonniert.
    - In den Argumenten des Events wird der Parent.Form B Name und die gewählte TabPage übergeben.
    - Damit kann das UserControl herausfinden ob es etwas tun soll oder eben nicht.

    Das Ganze funktioniert soweit ganz gut.
    Die Frage die sich mir nun stellt ist die, ob es nicht eine einfache Möglichkeit für das UserControl gibt ganz exklusiv von seinem Parent eine Info über den Tabwechsel und auf welchen Tab gewechselt wurde zu erhalten?
    Mit dem TabControl1.Selected-Event/TabControl1_Selected-EventHandler kannst Du ja direkt mitbekommen, wenn gewechselt wurde. Dort steht auch drin, welche TabPage nun aktiv ist. Wenn die UserControls ein Interface implementieren, von wegen IReactOnActivating, kann man über die TabPage-Controls durch Casting auch das konkrete UC auffordern, was zu machen.
    Also im Sinne von: »aktuelle TabPage: Nimm Dein erstes Control, welches IReactOnActivating implementiert und führe dafür die Aktion WasAuchImmer aus.«
    Für den Fall, dass Dir das irgendwie weiterhilft.
    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 denke auch, das ist eher eine Sache für ein Interface, oder eine Basisklasse, als für ein Event.
    Wenn ein Tab aktiviert wird, dann soll er halt dem darin enthaltenen aktuellen Usercontrol mitteilen, dass sein Tab aktiviert wurde.
    Mehr muss hofflich nicht mitgeteilt werden - was es zu tun hat sollte es selber wissen.
    Super, das klingt ja schon mal sehr vielversprechend und geht auch in die Richtung die ich gerne hätte.
    Die Nummer mit dem Event habe ich wider besseren Wissens gewählt.
    Mit Interfaces habe ich noch nichts gemacht.
    Gibt's dafür irgdendwo brauchbare Beispiele oder finde ich dazu gute und verständliche Infos im Netz?
    naja, such mal nachm vb.net-Online-Book von kühnel/Leibhard. Da gibts bestimmt ein Kapitel über Interfaces drinne.
    Ansonsten kann ich grad was basteln, wo ein TabControl den ucls auf den TabPages mitteilt, dass sie aktiviert sind.
    Aber im Buch musste das mit-lesen - nur vom Code werden die Konzepte in ihrer Tiefe wohl nicht ausreichend klar.
    Dateien

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