Load Event einer anderen Form aufrufen

Nico Graichen

Erfahrenes Mitglied
Nein, das heißt, dass die Methode ShowDialog() erst verlassen wird, wenn der Dialog geschlossen wurde!
Sie wartet, du sperrst damit den Rest der Anwendung. Danach brauchst du nur noch die Daten neu laden
 

napstermania

Mitglied
Hallo Nico,

prinzipiell hast du recht. Nach den using Statement sind alle Referenzen weg. Aber erst wenn der GC anspringt. Das weißt du an dieser Stelle nicht. Meine Erfahrung in großen Projekten hat mir gezeigt das es hin und wieder zu Problemen führen kann. Weil manche Events noch abonniert waren obwohl sie es eigentlich nicht mehr sein sollten. Microsoft kocht auch nur mit Wasser ;)

Hab mit meinen Mitarbeitern schon zu viel Zeit mit Fehlersuche verbracht weil ich auf manches von MS blind vertraut hab ;)

Events bei der Dialogbasierten Kommunikation einsetzen ist eine unserer Programmierrichtlinien. Egal ob Modal oder nicht. Von daher hat sich das bei mir so eingebürgert. Das mach ich mitlerweile schon automatisch ;)

Ich sagte ja, ist sicherlich keine Musterlösung aber sie erfüllt seinen Zweck :)

War jetzt nicht nagativ gemeint ;)

Grüsse
 

exiter28

Erfahrenes Mitglied
:) ja ich weiss, ich bin der Übeltäter. @napster... ich werd mal versuchen, anhand Deines Beispiels mein Prob zu lösen. Danke erst mal für Eure Tipps!!........
 

Nico Graichen

Erfahrenes Mitglied
:)
Ich hab damit nix zu tun :)
War das problem von exiter und habe dann mal die 3 Klassen gepostet wie man sein Problem lösen könnte ;)

Dann vielen Dank für die erfolgreiche Verwirrung! ;)

@exiter
Post doch mal bitte deine Code in der Art wie es napstermania gemacht hat (komplette Klassen aber reduziert aufs wesentliche), dann lässt sich auch einfach darüber diskutieren
 

exiter28

Erfahrenes Mitglied
OK.. also das ist der Code der ersten Form (childform) von der aus die EditForm aufgerufen wird:
Code:
namespace Manager
{
    public partial class childForm : Form
    {
        public childForm()
        {
            InitializeComponent();

        }
        

        private void childForm_Load(object sender, EventArgs e)
        {
            try
            {
                
                LoadClass.CompressTempFile(IniClass.textfile);
                LoadClass.LoadListBoxTemp(lbPreviewTemp6, IniClass.textfile);
                LoadClass.LoadListBox(lbPreview, lbPreviewTemp, lbPreviewTemp2, lbPreviewTemp3, lbPreviewTemp4, lbPreviewTemp5, lbUrlTemp, IniClass.textfile);
                    
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

und jetzt der Code der EditForm:
Code:
namespace Manager
{
    public partial class EditForm : Form
    {
        public EditForm()
        {
            InitializeComponent();
        }

        private void EditForm_FormClosed(object sender, FormClosedEventArgs e)
        {
        }
    }
}

und jetzt soll das LoadEvent der childform dann aufgerufen werden, wenn die EditForm geschlossen...
 

Shakie

Erfahrenes Mitglied
Angenommen, die childForm hat einen Button "ButtonShowEditForm" mit zugehörigem Click-Event, dann sollte Folgendes funktionieren:
childForm:
C#:
    public partial class childForm : Form
    {
        public childForm()
        {
            InitializeComponent();
        }

        private void ButtonShowEditForm_Click(object sender, EventArgs e)
        {
            using (EditForm edit = new EditForm())
            {
                edit.ShowDialog();
                DeineMethode();
            }
        }

        private void childForm_Load(object sender, EventArgs e)
        {
            DeineMethode();
        }

        private void DeineMethode()
        {
            LoadClass.CompressTempFile(IniClass.textfile);
            LoadClass.LoadListBoxTemp(lbPreviewTemp6, IniClass.textfile);
            LoadClass.LoadListBox(lbPreview, lbPreviewTemp, lbPreviewTemp2, lbPreviewTemp3, lbPreviewTemp4, lbPreviewTemp5, lbUrlTemp, IniClass.textfile);
         }
    }
EditForm:
C#:
    public partial class EditForm : Form
    {
        public EditForm()
        {
            InitializeComponent();
        }
    }
 

exiter28

Erfahrenes Mitglied
@Shakie
Perfekt!! funktioniert Super, genau wie ich das wollte.

@Nico + @ napster... ich Danke Euch ebenfalls für Eure Hilfe und vor allem Eure Geduld ....

Danke!
 

Nico Graichen

Erfahrenes Mitglied
Bitte schön!

Ein Hinweis aber noch: Du solltest deine Controls nicht public oder internal machen. Das ist schlechtes Design. Ich meine damit deine LoadClass. Diese erfordert Controls und ist damit nicht wiederverwendbar.
Die Methoden sollten die Daten unabhängig vom Control zurückliefern und nicht das Control direkt befüllen. Sowas kannst du nur machen, wenn die Methoden auch in der Form-Klasse implementiert sind.