2017-01-27 4 views
-1

私は2つのプロジェクトで構成される新しいソリューションを作成しようとしています。ソリューションスタートアッププロジェクトは「メインコンポーネント」プロジェクトで、もう1つは「ログイン機能」プロジェクトです。if条件でコンポーネントを初期化しますか?

"メインコンポーネント"のメインフォーム "ログイン機能"でLoginFormを呼び出すソリューションが開始されたとき。私は、MainFormコンストラクタでLoginFormを呼び出し、完璧に動作する条件を書いていますが、LoginFormからエスケープするときにProgram.csのようなエラーが表示されます。 initializeComponent()はconditionがtrueのときに働くためです。私はそれを行う別の方法がわからない。

解決策は動作していますが、このDispose問題を解決するにはどうすればよいですか?

Program.cs;

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

が配置されたオブジェクトにアクセスすることはできません\ rを\ nObject名: 'MainFormを'。あなたが適切にIDisposableインターコンポーネントを配置していない

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

代わりのMainForm'は、なぜメイン 'から' LoginForm'を() '起動し、成功でログイン時にその打ち上げ'のMainFormを() '持たない'起動します。 –

+0

それは私がログイン機能として起動proectに変更することを意味します。私はログインフォームを隠してメインフォームを表示する必要があります。もしあなたが言ったようにしますが、私はスタートアッププロジェクトを隠したくありません。 – Okan

+0

@いいえいいえ、そうではありません。 'Main'は独自のアプリケーションループを持って、それ自身のメインフォームとしてログインフォームを起動します。終了したら、新しいアプリケーションループで新しいメインフォームを起動します。 – Servy

答えて

0

あなたの主な問題。 あなたはあなたのコンポーネントを手で新しいものにしないように、あなたのより良い構造を持つ必要があります。 しかし、あなたはusing使用状況を次のようにコンデをexsting修正することができます:

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

ええ@klashar、あなたは絶対に '使用'を使用することについて正しいですが、結果は同じです。依然として「廃棄されたオブジェクトにアクセスできません。」\ r \ nオブジェクト名:「MainForm」 – Okan

関連する問題