Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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

Stichwort Globale Variablen.

Du könntest einfach den Datatable der dir beim ersten gridview als datasource dient, global deklarieren, diesen dann noch im ersten form befüllen lassen und dann ganz einfach im 2 Form auf die variable die deinen datatable vertritt zugreifen....

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()

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.