2011-12-15 5 views
1

Этот вопрос может показаться простым, но я не могу найти ответ, который я ищу. У меня есть Login_Form и Main_Form. Как только я вхожу в Main_Form, я просто делаю его видимым, и я его активирую, потому что я не хочу, чтобы мой Login_Form закрывался. Мой вопрос в том, есть ли способ закрыть обе формы одновременно с Main_Form? this.Close(); только закрывает текущую форму.Простой способ закрыть форму

if (access) 
{ 
    Main_Form mainForm = new Main_Form(); 
    mainForm.Visible = true; 
    mainForm.Activate(); 
} 

Это то, где я запускаю main_form, как передать ссылку на login_form? Заранее спасибо и запомните, что Login_Form должен оставаться открытым, пока я не закрою его из Main_Form!

Обратная связь

Посмотрев на какие из ваших ответов я использовал бы я узнал о Application.Close() метод, который закрывает все формы. Должен был учиться об этом, прежде чем публиковать здесь спасибо всем.

+0

ли Main_Form переменная член login_form? Более подробная информация о дизайне вашего графического объекта. –

ответ

3

Если Основной вид имеет ссылку на Логин форма, которую вы можете вызвать метод близко от него. Как вы это делаете, зависит от вас.

  • Вы можете передать ссылку на главную из формы входа в систему, когда вы ее покажете.
  • Вы можете сохранить глобальную ссылку на форму входа в систему. (Думаю singleton)
  • любым другим способом вы можете думать о

. Например:

public class MainForm : Form 
{ 
    Form loginform; 
    public MainForm(Form loginForm) 
    { 
     this.loginForm = loginForm; 
    } 

    public void CloseForms() 
    { 
     loginForm.Close(); 
     this.Close(); 
    } 
} 

В вашем методе активного(), просто пройти регистрационную форму в качестве альтернативы вы можете использовать код выше, и просто передайте this в конструктор вместо метода Active().

public class MainForm : Form 
{ 
    Form loginform; 
    public Active(Form loginForm) 
    { 
     this.loginForm = loginForm; 
    } 

    public void CloseForms() 
    { 
     loginForm.Close(); 
     this.Close(); 
    } 
} 

//from the LOGIN form 
if (access) 
    { 
     Main_Form mainForm = new Main_Form(); 
     mainForm.Visible = true; 
     mainForm.Activate(this); //this is a reference to the current form. LOGIN in this case 

    } 
+0

Мне нравится этот подход. Я обновляю свой вопрос с помощью некоторой строки кода, потому что не могу понять, как передать ссылку на main_form. – phadaphunk

+0

Избегайте передачи каких-либо параметров через конструктор Form/Control или вы испортите конструктор. Вместо этого используйте свойства. – surfen

+0

Отлично работает Спасибо! – phadaphunk

1

Если у вас есть ссылка на форму для входа в систему, тогда позвоните по номеру Close.

Login_Form.Close() 

Вы должны изменить конструктор Main_Form принять экземпляр формы Войти в качестве параметра

+0

Мне нравится этот подход. Я обновляю свой вопрос с помощью некоторой строки кода, потому что не могу понять, как передать ссылку на main_form. – phadaphunk

1

Вы также можете использовать метод AddOwnedForm.

Из выше ссылке:

Когда форма принадлежит другой форме, он закрыт или скрыт с формой владельца. Например, рассмотрим форму с именем Form2, которая принадлежит форме Form1. Если Form1 закрыт или сведен к минимуму, Form2 также закрыт или скрыт. Собственные формы также не отображаются за их формой владельца . Вы можете использовать принадлежащие формы для окон, таких как find и , заменить окна, которые не должны отображаться за формой владельца при выборе формы владельца.

Код:

Form loginForm = new Form(); 
this.AddOwnedForm(loginForm); 
loginForm.Show(); 

Edit:

Form mainForm = new Form(); 
mainForm.Visible = true; 
mainForm.AddOwnedForm(this); 
mainForm.Activate(); 

теперь, если вы закрыть MainForm он закроет обе формы.

+0

oooh Не знал об этом методе, и это делает его более простым! Большое спасибо ! – phadaphunk

+0

Но отметьте, что если этот LoginForm является моей формой по умолчанию, указанной программой program.cs в 'Application.Run (new Login_Form());' Эта форма создана без имени нет? Как я могу сделать форму AddOwned этой формы? – phadaphunk

+0

Итак, Login_Form является родительской формой, и вы создаете mainForm из нее, тогда вы должны использовать это вместо имени формы, чтобы назначить его mainForm. См. Выше edit. –

1

Вы могли бы просто использовать Application.Exit(); не Application.Close();

Смежные вопросы