2017-01-27 1 views
-1

J'essaie de créer une nouvelle solution composée de 2 projets. Solution Le projet de démarrage est un projet "Composant principal" et l'autre projet est un projet "Fonction de connexion".initialiser le composant fonctionnant en condition if?

BasicFormulaire dans "Composant principal" appelant LoginForm dans "Fonction de connexion" Lorsque la solution démarre. J'ai écrit une condition dans MainForm Constructor pour appeler LoginForm et fonctionner parfaitement mais je reçois une erreur comme suit dans Program.cs lors de l'échappement de LoginForm. Parce que la partie initializeComponent() fonctionne quand if condition est vraie. Je ne sais pas si c'est une autre façon de le faire.

Je sais que la solution fonctionne mais comment puis-je résoudre ce problème?

Program.cs;

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

Impossible d'accéder à un objet disposé \ r \ nom nObject:. '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

Au lieu de lancer 'MainForm' pourquoi ne pas lancer' 'LoginForm' de Main()' et 'a ce lancement MainForm()' sur un login sucessful. –

+0

Thats signifie que je vais changer de fonction de démarrage en tant que fonction de connexion et bien sûr je devrais cacher la forme de connexion et montrer mainform Si je fais comme vous l'avez dit mais je ne veux pas cacher le projet de démarrage. – Okan

+0

@Okan Non, ce n'est pas le cas. Avoir 'Main' lancer le formulaire de connexion comme son propre formulaire principal, avec sa propre boucle d'application. À la fin, lancez un nouveau formulaire principal avec une nouvelle boucle d'application. – Servy

Répondre

0

Votre principal problème que vous n'êtes pas correctement IDisposable composant débarrassez. Vous devez avoir une meilleure structure de votre afin que vous ne renouveliez pas vos composants à la main. Mais vous pouvez fixer exsting conde avec using suivant l'utilisation:

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

Ouais @klashar, vous avez absolument raison d'utiliser l'utilisation mais le résultat est le même. Toujours recevant 'Impossible d'accéder à un objet disposé. \ R \ nNom de l'objet:' MainForm ' – Okan