2013-07-30 3 views
2

Я пишу многоформатное приложение, и я хотел бы иметь возможность закрыть Form1 без закрытия приложения.
Прямо сейчас я использую this.Hide, чтобы скрыть форму. Есть ли способ установить его, чтобы я мог закрыть любую форму, или приложение должно существовать только тогда, когда все формы закрыты?C# Приложение завершается, когда основная форма закрывается

Я думаю, что в какой-то момент я помню что-то подобное, но это, возможно, не было визуальной студией и C#.

+0

Посмотрите на 'Program.cs'. Форма, используемая на третьей строке, - это ваша «корневая» форма, и программа закрывается, когда эта форма закрывается. Поскольку программа не работает, после запуска формы она закрывается. Что вы хотите, чтобы программа сделала после закрытия формы? – gunr2171

+0

Возможный дубликат http://stackoverflow.com/questions/5599097/close-a-windows-form-without-exiting-the-entire-application?rq=1 – jrbeverly

ответ

7

В вашем файле Program.cs у вас есть линия, например Application.Run(new Form1()). Замените его

var main_form = new Form1(); 
main_form.Show(); 
Application.Run(); 

Кроме того, необходимо закрыть приложение в явном виде при вызове Application.Exit(), где вы хотите.

+1

Спасибо! Это сработало, НО я должен был сделать это следующим образом: 'var main_form = new Form1();' 'main_form.Show();' 'Application.Run();' , иначе он просто запускался с нет формы. Еще раз спасибо! – WolfyD

+1

Да, забыл об этом.Добавил его к ответу. – dmay

0

Многоформатная заявка должна иметь ясную опцию EXIT (либо меню, панель инструментов), так как вы не можете знать, что пользователь хочет закрыть программу, когда последнее окно закрыто (я полагаю, что пользователь может перейти к Файл/Открыть и открыть новые окна)

Приложение, которое делает что-то автоматически, что пользователь не просил, может использовать фрустрацию/замешательство и потратить время на повторное открытие приложения.

Даже пользователь может подумать, что приложение каким-то образом потерпело крах, так как он не закрыл его.

+0

Спасибо, это хорошо знать. На самом деле, я уверен, что мои приложения удобны для пользователя, я обычно не ограничиваю их возможность изменять размер окон и подобных вещей, но это линейное приложение и имеет определенный поток. Когда пользователь нажимает на следующую кнопку, я хочу, чтобы она переходила к следующей форме и закрывала предыдущую. Я мог бы скрыть это, но я предпочитаю не тратить процессорное время на невидимую форму, которую пользователь больше никогда не увидит. – WolfyD

+0

Также пользователь получит возможность выйти из приложения в каждой форме. – WolfyD

+0

@WolfyD, если это единственный поток, почему бы не реализовать типичный интерфейс мастера с кнопками BACK, NEXT, CANCEL? кнопки NEXT будут заменены на FINISH, когда желаемое состояние будет достигнуто. –

0

Основываясь на вашей коментарии это единственный вид потока приложения

Я предлагаю вам реализовать типичный интерфейс мастера на одной форме с Назад, Вперед, ОТМЕНОЙ кнопки.

Когда желаемое состояние было достигнуто, для была собрана пример достаточно информации, то кнопку СЛЕДУЮЩИХ изменяются на кнопку FINISH.

Каждый раз, когда пользователь нажимает ОТМЕНА/ОТДЕЛКА кнопки окно закроется

И если вы все еще хотите MULTIFORM вы могли все еще есть, в этом вы можете иметь несколько потоков одновременно и просто закончить или отменить тот, который вы хотите.

+0

Да, я подумал об этом, но поскольку для каждой формы требуются различные элементы управления и информация, было бы довольно беспорядочно настраивать, но я разработал ее таким образом способ, когда пользователь получает следующую форму, приложение продолжает работать, и когда пользователь хочет закрыть форму либо с помощью [x], либо с диспетчером задач, либо с кнопкой закрытия, это закрывает все приложение, поэтому нет путаницы. – WolfyD

3

Одна стратегия заключается, чтобы сделать что-то вроде следующего:

private void Form1_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    if (Application.OpenForms.Count == 0) 
     Application.Exit(); 
    } 
} 

Если вы поместите это на все ваши формы, когда последний закрывается, приложение будет выйти.

+0

В 5-й строке есть дополнительная '}'. – GGG

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