2017-01-27 11 views
-1

Я пытаюсь создать новое решение, состоящее из 2 проектов. Проект запуска при запуске - проект «Основной компонент», а другой проект - «Функция входа в систему».инициализировать компонент, работающий в состоянии if?

Основная функция MainForm в «Главном компоненте», вызывающая LoginForm в «Функция входа» при запуске решения. Я написал условие в MainForm Constructor для вызова LoginForm и работает отлично, но я получаю сообщение об ошибке, как описано в Program.cs при выходе из LoginForm. Поскольку функция initializeComponent() работает, если условие истинно. Я не знаю, есть ли другой способ сделать это.

Я знаю Решение работает, но как я могу исправить эту проблему 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); 
      } 
     } 
    } 
} 

Не удается получить доступ к объекту, расположенную \ г \ 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

Вместо запуска 'MainForm' почему бы не запустить' LoginForm' от 'Main()' и есть, что запуск 'MainForm()' на Успешной логин. –

+0

Это означает, что я перейду на запуск в качестве функции входа в систему, и, конечно же, я должен скрыть форму входа в систему и показать основную форму. Если я действительно так сказал, но я не хочу скрывать проект запуска. – Okan

+0

@Okan Нет, это не так. «Main» запустит форму входа в систему, поскольку это собственная основная форма с собственным циклом приложения. Когда это закончится, запустите новую основную форму с новым циклом приложения. – Servy

ответ

0

Ваш главный вопрос, который вы не правильно распоряжаться IDisposable компонент. У вас должна быть лучшая структура вашего, так что вы не будете создавать новые компоненты руками. Но вы можете исправить exsting Конде со следующими using использования:

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