Zum Inhalt springen

Form1 von Form 2 manipulieren


Mytoserus

Empfohlene Beiträge

Hallo

Ich habe folgendes Problem. Ich habe ein Projekt mit zwei Forms. In der ersten Form im Form_load Erreignis habe ich eine DatenBankausgabe mittels Gridview in der zweiten kann ich sie Administrieren. Wenn ich auf der Form 2 auf speichern gehe will ich das die Ausgaben auf Form 1 die neuen Eintragungen beinhalten ohne Aktualisieren Button auf Form 1 also ein Form1 Load ereignis starten mit speichern auf Form 2. Hat jemand ne Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

eigentlich könnte man Daten auch in einer einzigen Form ansehen und auch manipulieren. Aber ich kennen ja auch die Anforderungen nicht.

In diesem Fall muss Form1 auf die Aktualisierung von Form2 reagieren. Also sobald in Form2 ein Datensatz hinzugefügt wird soll sich Form1 aktualisieren.

Prinzipiell weiß Form1 nicht was Form2 so treibt. Form2 muss also ein Event auslösen und Form1 muss darauf reagieren.

In Form2 muss muss ein Delegate (typensicherer Funktionszeiger) erstellt werden. Danach wird ein Event vom Typ des Delegates erzeugt.

Siehe:


    public partial class Form2 : Form

    {

        public delegate void Aktualisiert_EventHandler(object sender, EventArgs e);

        public event Aktualisiert_EventHandler AKTUALISIERT;


Damit kann Form2 ein Event auslösen. Zum Beispiel beim Click auf einen Button.Das sieht dann so aus:

        private void cmdSave_Click(object sender, EventArgs e)

        {

            //Code zum aktualisieren der DB..

            //Jetzt wird das Event ausgelöst

            AKTUALISIERT(this, EventArgs.Empty);

        }

Jetzt muss Form1 nur noch drauf reagieren können und zwar mit einem Eventhandler. Form2 wird in Form1 instanziert und durch einen Buttonclick angezeigt.

    public partial class Form1 : Form

    {

        Form2 frm2 = new Form2();


        public Form1()

        {

            InitializeComponent();

            //Hier wird der Eventhandler hinzugefügt

            frm2.AKTUALISIERT += new Form2.Aktualisiert_EventHandler(frm2_AKTUALISIERT);

        }


        void frm2_AKTUALISIERT(object sender, EventArgs e)

        {

            //Code zur Aktualisierung von Form1

        }


        private void cmdNeuerDatensatz_Click(object sender, EventArgs e)

        {

            frm2.Show();

        }


    }

Hoffe das hilft Dir weiter!

Gruß,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

von globalen Variablen sollte man imo nur dann gebrauch machen wenn das wirklich global ist, was weis ich, nen Username oder sowas.

Das gefährliche an globals ist dass man damit verdammt schnell, verdammt hässliche Seiteneffekte haben kann und wird, wenn das Projekt mal etwas grösser wird. Ich benutz die daher auch fast ausschlieslich für konstante Werte.

Und Form1 durch ein Event auf Form2 reagieren lassen ist verdammt einfach.

Du rufst einfach im Eventhandler auf Form2 (da wo was passieren soll mit Form1) die entsprechende Methode auf Form1 auf.

Das ist nen einfaches Form1.machwas(). Und so wie sich der Fall für mich gerade anhört, dass du die Daten im Form_load aktualisierst :

form1.reload()

Link zu diesem Kommentar
Auf anderen Seiten teilen

Globale Variablen...

die sollte man wirklich nie benutzen und wie ich weiter oben geschrieben habe solche Dinge mit einem Eventhandler abfangen.

Aber bitte, bitte, bitte dies mit einem "expliziten Eventhandler"! abfangen.

Im FormLoad() kann viel drin stehen, was dann auch alles mit ausgeführt wird

und was noch viel wichtiger ist... Was passiert wenn ich die Signatur des Events verändere und zum Beispiel noch einen String übergeben möchte?


        public delegate void Aktualisiert_EventHandler(object sender, EventArgs e, string returnString);

        public event Aktualisiert_EventHandler AKTUALISIERT;

Dann hagelt es Fehler bei der Erstellung weil Form1_Load()

        private void Form1_Load(object sender, EventArgs e)

nicht mehr die korrekte Signatur besitzt.

Und wenn man hier mit Multuthreading arbeitet hat man bei globalen Variablen (die es in C# garnicht gibt ;)) ruckzuck einen Deadlock.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...