2013-09-17 5 views
-1

ТребованияКак правильно показать окно настроек при запуске приложения (в WinForms)?

А WinForms приложение, которое имеет окно настроек (которые могут быть доступны через меню). Кроме того, перед запуском приложения перед отображением окна приложения сначала нужно отобразить окно настроек. (Это заставляет пользователя проверять/изменять настройки при каждом запуске приложения).

Моя реализация до сих пор

Иметь MainForm и SettingsForm. SettingsForm имеет пару полей ввода, которые сохраняются внутри при закрытии окна. Существует пункт меню в MainForm, чтобы открыть SettingsForm. Для того, чтобы отобразить SettingsForm (через пункт меню) я называю:

SettingsForm settingsForm = new SettingsForm(); 
settingsForm.Owner = this; 
settingsForm.ShowDialog(); 

Для того, чтобы отобразить SettingsForm перед показом MainForm, я вызываю код выше в MainForm_Load(), прежде чем делать что-нибудь еще.

Проблема

В заявке перспективе SettingsForm отображается. Но через 2-3 секунды он замерзает.

SettingsForm является «статическим». Это означает, что его единственным действием является сохранение значений входных файлов при закрытии окна.

[EDIT] Проблема возникла Timer, которая находилась на MainForm. Таким образом, общий дизайн в порядке и может использоваться в качестве действительного решения.

+2

Не уверен, что это является причиной вашей проблемы, но, как правило, не так уж и важно открыть дочернюю форму MainForm до того, как сама MainForm была загружена. Вместо этого попробуйте использовать параметр SettingsForm в качестве начального аргумента 'Application.Run()', а когда он будет закрыт, вызовите 'Application.Run()' снова с MainForm в качестве аргумента. –

+3

Основываясь на том, что вы говорите, 'SettingsForm' не замерзает. Поэтому это нечто другое, что вы не нашли достаточно интересным, чтобы сказать, что вызывает проблему.Возможно, вы пытаетесь связаться с «MainForm» из «SettingsForm» так же, как это появляется, и при этом вы входите в тупик или блокировку сообщения. Кроме того: возможно, что симптом «2 секунды» - это просто время, в течение которого ОС осознает, что «НастройкиФорма» не желает отвечать на сообщения, и на самом деле он был заморожен со второго 0 –

+0

@MagnusGrindalBakken Согласен. Так что чище. Тем не менее я опробовал условия, явно представленные в вопросе, и с этим подходом нет никаких проблем. Я предполагаю, что Yeseanul делает что-то не в вопросе, вызывающем замораживание. –

ответ

0

Весь мой проект у меня был установочный/пользовательский экран входа. что я делаю, чтобы предотвратить это, открывается реальная основная форма невидимая, но в диалоговом окне FormLoad() i call show отображаются все экраны, которые мне нужны для ввода. то после проверки всех диалоговых окон, если они действительны, я разрешаю formload() основной формы продолжить, как правило, все левые, применяя фильтр к элементам панели мониторинга, которые могут быть в этой основной форме, и, наконец, возвращают видимую форму.

Я добавлю alos, вы должны использовать прозрачность и НЕ видимость, потому что это вызывает мерцание экрана. я заметил, что на средних бизнес-компьютерах они довольно медленные, и если вы установите видимость по умолчанию в сетке свойств во время разработки на visible = false, чтобы форма фактически отображалась, когда вызывается formLoad(), а затем видят свойство и становятся невидимыми после , на компьютере с 1.8/2.0 ghz с видеокартами вы этого не видите, если не загружаете дерьмовую нагрузку в режиме загрузки. Я нашел обходное решение, чтобы установить непрозрачность 0. opacity до 0 устанавливается перед визуализацией формы, как я вижу из личного опыта результата (на самом деле не проверял переопределение на краске и тому подобное). поэтому я прекратил использовать видимость, если это необходимо для невидимости при запуске вместо непрозрачности использования.

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