2017-01-27 3 views
-1

Ich versuche eine neue Lösung zu erstellen, die aus 2 Projekten besteht. Solution Startup Project ist das Projekt "Main Component" und das andere Projekt ist das Projekt "Login Function".initialisieren Komponente in if-Zustand arbeiten?

Basic MainForm in "Main Component" Aufruf LoginForm in "Login-Funktion" Wenn die Lösung starten. Ich habe eine Bedingung in MainForm Constructor für den Aufruf von LoginForm geschrieben und funktioniert perfekt, aber ich erhalte einen Fehler wie folgt in Program.cs beim Entkommen von LoginForm. Weil initializeComponent() Teil arbeitet, wenn die Bedingung wahr ist. Ich weiß nicht, ob es eine andere Möglichkeit gibt, das zu tun.

Ich weiß Lösung funktioniert, aber wie kann ich dieses Dispose Problem beheben?

Programm.cs;

namespace Main_Component 
{ 
    static class Program 
    { 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      using (var mainForm = new MainForm()) 
      { 
       Application.Run(mainForm); 
      } 
     } 
    } 
} 

kann kein angeordnete Objekt zugreifen \ r \ NObjekt name:. 'Mainform'.

public MainForm() 
    { 
     try 
     { 
      var _lForm=new LoginForm(); 
      _lForm.ShowDialog(); 
      if (LoginForm._loginSuccess) 
      { 
       InitializeComponent(); 
      } 
      else 
      { 
       this.Close(); 
      } 
     } 
     catch (Exception err) 
     { 
      MessageBox.Show(err.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 
+0

Statt startet 'MainForm' warum starten' LoginForm' nicht von 'Main()' und haben diesen Start 'Mainform()' auf einem erfolgreichen Login. –

+0

Das heißt, ich werde in den Startup-Prozess als Login-Funktion wechseln und natürlich sollte ich das Login-Formular ausblenden und mainform anzeigen Wenn ich dich mag sagte, aber ich möchte nicht Startprojekt verstecken. – Okan

+0

@Okan Nein, tut es nicht. Lassen Sie 'Main' das Anmeldeformular als eigenes Hauptformular mit einer eigenen Anwendungsschleife starten. Wenn es beendet ist, starten Sie ein neues Hauptformular mit einer neuen Anwendungsschleife. – Servy

Antwort

0

Ihr Hauptproblem, dass Sie nicht richtig IDisposable Komponente entsorgen sind. Sie müssen eine bessere Struktur haben, damit Sie Ihre Komponenten nicht mit den Händen neu erstellen. Aber Sie können mit folgenden using Nutzung exsting conde beheben:

public MainForm() 
    { 
     try 
     { 
      using(var _lForm=new LoginForm()) 
      { 
       _lForm.ShowDialog(); 
       if (LoginForm._loginSuccess) 
       { 
        InitializeComponent(); 
       } 
       else 
       { 
        this.Close(); 
       } 
      } 
     } 
     catch (Exception err) 
     { 
      MessageBox.Show(err.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 
+0

Yeah @Klashar, Sie haben absolut Recht über "Verwendung" Verwendung, aber das Ergebnis ist das gleiche. Immer noch empfangen 'Zugriff auf ein entsorgtes Objekt nicht möglich. \ R \ nObjektname:' MainForm '' – Okan

Verwandte Themen