2011-01-12 3 views
1

У меня есть приложение для формы окна (игра), в котором есть кнопка статистики. Когда пользователь нажимает кнопку статистики, появляется новое окно, где он может видеть свою статистику.Закрытие нескольких окон, хотя одно окно закрыто

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

Как закрыть форму статистики из формы игры?

ответ

3

Укажите владельца формы с помощью свойства Form.Owner. В вашем случае это может быть либо главное окно, либо любое окно с элементом GUI, который был вызван пользователем, чтобы создать новое окно. Новая форма будет закрыта, если ее владелец будет закрыт. Это отношение является каскадным, поэтому, если вы установили владельца формы B как форму A, тогда сформируйте владельца C как B, C закроется, если вы закроете A OR B (B также закрывается, если вы закрываете A). Если B порождает C, но C полезен независимо от B, тогда установите владельца C как A (вы можете сделать это через свойство владельца формы B), а C останется открытым, когда B закрыт, но все равно будет закрыт, когда A закроется.

И наконец, если вы откроете «основную» форму программы, используя Application.Run (Form mainForm), когда окно, указанное как параметр, будет закрыто, приложение полностью выйдет. Итак, если исполняемый файл порождает A, A икру B, а B - икру C, когда A закрывается, приложение закрывается, а ВСЕ окна закрываются независимо от права собственности.

+0

Отлично! благодаря –

-1

Почему бы не просто открыть его как dialog, используя ShowDialog(), чтобы заставить его закрыть его перед тем, как вернуться к форме опций?
и если форма игры является основной формой, то она должна автоматически закрыть другие оставшиеся формы, в противном случае вы должны объявить satasForm где-то внутри формы вашей игры и управлять ими, чтобы закрыть его, когда-либо пользователь закрывает форму вашей игры

StatsForm sFrm = new StatsForm (); 
public gameFrm() 
{ 
InitializeComponent(); 
} 

private void btnShowStateForm_Click(object sender, EventArgs e) 
{ 
sFrm.Show(); //or call 
// sFrm.ShowDialog(); 
} 

private void gameFrm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
sFrm.Close(); 
} 
+0

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

+0

Насколько я знаю, все интерфейсы параметров в играх работают как диалог или полный вид окна, и это было просто предложение, если вы посмотрите на код, вы можете заметить, что 'Show()' используется как то, что используется –