Entwickler-Ecke

WinForms - Checkbox von einer zweiten Form aus aktivieren


walsumer - Fr 06.02.15 20:31
Titel: Checkbox von einer zweiten Form aus aktivieren
Hallo Scripter,

ein kleines Problem für einen der es kann aber ein großes für ein newbie wie mich :)

Folgende Herausforderung:

ich möchte eine Checkbox in der Mainform von einer zweiten Form aus über eine Checkbox aktivieren.
Mein erster Versuch die checkbox als public static void zu deklarieren funkt leider nicht:)
Was ich hinbekommen habe ist ein Umweg über bool get/set welcher über ein timer in der Mainform abgefangen wird was aber ein totaler workaround ist und nicht wirklich das ist was ich möchte.
Wie kann ich es besser machen? und warum kann ich die Checkbox nicht als public static deklarieren?

Danke und Gruß
Walsumer


Ralf Jansen - Fr 06.02.15 20:41

Zitat:
und warum kann ich die Checkbox nicht als public static deklarieren?


Weil es keinen Sinn macht. Die gleiche Form kann man beliebig oft erzeugen und anzeigen nicht nur 1 mal. Welche von den potentiell angezeigten Formen soll den dann gemeint sein wenn irgendwas statisch wäre? Etwa alle? Nein wenn ein a etwas an einem b ändern will muss dieses a das konkrete b kennen. Also braucht deine 2.te Form eine Referenz auf die konkrete Mainform die auch angezeigt wurde.

Der von TH69 immer wieder gern (zurecht) verlinkte Artikel [http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html] zum Thema.


walsumer - Fr 06.02.15 22:17

Danke Ralf für die schnelle Antwort,

Wie würde so eine Referenz auf die Checkbox der Mainform aussehen hast Du ein kleines Beispiel?
Wobei ich erzeuge beide Formen nur ein einziges mal schließe auch keine der Formen etwa mit close nein ich ändere jeweils im wechsel nur die Sichtbarkeit mit hide weil ich immer die Main form im Hintergrund ansprechen möchte da diese unter anderem auf KeyPress-Hook und andere Befehle reagieren sollte und zusätzlich Werte in ein Listview eintragen muss.

Danke und Gruß
Walsumer


Ralf Jansen - Fr 06.02.15 23:16

Darum hab ich den Artikel verlinkt. Es steht genau beschrieben darin. Lies insbesondere ab 'Typische Anfängerfehler'.

Und nachdem du das gelesen hast sei noch gesagt ein wichtiges Prinzip ist das Geheimnisprinzip. Klassen (also auch Formen) sollen nur das absolut Notwendigste veröffentlichen. Heißt hier veröffentliche an der Mainform nur eine Methode/Property etc. die genau nur das tut was du brauchst und nicht mehr. Wenn jemand anderes die CheckBox kennen würde könnte er auch alles andere mit der Checkbox tun (Text ändern etc.). Also der 2.ten Form eine Methode geben über die man die MainForm übergeben kann (steht wie gesagt in dem Artikel) und der Mainform eine Methode geben damit die 2.te Form darüber den CheckBox Zustand ändern kann.


DarkStaRX - Sa 21.02.15 17:22

Kannst du einfach über delegate lösen.

Beispiel: https://rainerhilmer.wordpress.com/2008/03/05/events-in-c-ein-einfaches-beispiel/

Dem delegate kann man auch Parameter mit übergeben.