2014-01-20 2 views
1

Я работаю над проектом и до сих пор отлично работает. У меня есть 3 формы, и их будет больше, но теперь проблема:Hold Form.ShowDialog-State при показе новой формы

При запуске программы Form1 будет показан. На одной кнопке я вызываю это, чтобы открыть новую форму:

Form2 frm = new Form2(); 
frm.ShowDialog(); 

Хорошо, это работает нормально. Form2 будет отображаться перед Form1, и если я его закрою Form1 снова является основной формой.

В Form2, я хочу сделать то же самое, в настоящее время, но Form2 должны быть закрыты и form3 должен быть впереди. Ну, это не очень сложно, но когда я называю это так ...

Form3 frm = new Form3(); 
frm.ShowDialog(); 
this.Close(); 

... Form2 не будет закрыто из-за ShowDialog. Что я могу сделать? Я хочу, чтобы Форма Form3 находится в передней, Form2 закрыт и Form1 все еще там, но я не могу нажать на нее, как Форма Form3 следует назвать с ShowDialog.

На данный момент Форма Form3 показана над Form2, но я хочу, что показано более Form1. Что делать, чтобы решить эту проблему?

Конечно, формы имеют другие названия, это просто, чтобы было легче понять.

Здесь вы можете увидеть две фотографии для понимания его лучше:

Вот как это выглядит: http://www.directupload.net/file/d/3508/xmy99iwq_png.htm

Form2 видно, но я хочу, чтобы это было закрыто.

Как здесь:

http://www.directupload.net/file/d/3508/qjvy42wq_png.htm

Но я хочу, чтобы Форма Form3 находится в передней, и вы не можете нажать на Form1, как я назвал Форма Form3 с ShowDialog в Form1.

+0

наклоняет вы просто изменить порядок, чтобы закрыть Form2 б перед вызовом 'frm.ShowDialog();' – Jonesopolis

+1

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

@ Jonesy Логически нет, потому что, когда я закрываю Form2 раньше, я не могу показать новую форму, и я также не хочу ее скрыть. –

ответ

1

Не найдено Form1 звонок Form2.ShowDialog. Попросите его вызвать другие методы.Добавить новый метод Form2, который делает то, что Form2должен делать, когда показано, например, как это:

public class Form2 : Form 
{ 
    public void Display() 
    { 
     ShowDialog(); 
     Form3 dialog = new Form3(); 
     //TODO pass in parameters 
     dialog.ShowDialog(); 
    } 
} 

Другим вариантом будет иметь некоторые совершенно отдельный класса справиться с этим, возможно, Form1, или, возможно, каким-либо другим типом, по существу публичная «обертка» для Form2 и Form3, так что пользователи этих форм (т.е. Form1) только когда-либо использовать этот класс-оболочку, которая будет выглядеть примерно так:

public class Foo //TODO give better name 
{ 
    public void ShowPopups() 
    { 
     Form2 firstDialog = new Form2(); 
     firstDialog.ShowDialog(); 
     Form3 secondDialog = new Form3(); 
     //TODO pass in parameters 
     secondDialog.ShowDialog(); 
    } 
} 
Смежные вопросы