Формы автоматически отображаются без моего ведома? - PullRequest
1 голос
/ 22 декабря 2011

Теперь, по крайней мере, с 300 вариантами созданных вручную форм, которые я создал за последние 5 лет, я никогда не сталкивался с этой проблемой.У меня есть, конечно, основная форма, а затем куча более мелких дочерних форм.Эти дочерние формы не создаются автоматически, они объявлены и созданы вручную в моем коде.Этот проект все еще очень преждевременен, а это значит, что в этом проекте не так много кода, что я могу что-то упустить.Но проблема в том, что все, что я делаю, это создаю форму, присваиваю родительский элемент основной форме, и без кода для ее отображения, он все равно показывает себя.

FControlPanel:= TfrmControlPanel.Create(nil);
FControlPanel.Parent:= Self;

Вот и весь код, который ядолжен создать это.Абсолютно нет кода в фактической дочерней форме вообще.Для того, чтобы он был видимым, должно пройти не менее FControlPanel.Show, но по какой-то причине он все равно виден.

У меня есть догадка, с чего могло начаться это поведение.Но я не могу соединить два и два.Я попытался использовать возможности форм MDI, чтобы сохранить формы в основной форме.Но после ряда сценариев проб и ошибок я сдался и вернул свои свойства обратно.Единственными свойствами, которые я изменил, был FormStyle - основная форма, которую я переключил (для испытаний) между fsMDIForm, fsNormal и fsStayOnTop.В дочерних формах я переключил их на fsMDIChild.После того, как я сдался, я переключил их все на их значение по умолчанию, fsNormal.Именно после этой игры началось это "автосалон".

Также, вероятно, важное замечание, эти дочерние формы наследуются от главной формы.Эта мастер-форма практически не имеет кода, по крайней мере, нет кода, который мог бы ее показать.Нигде в моем коде я не показываю эти дочерние формы, но это так или иначе.И я знаю, что они не создаются автоматически.

Что я мог сделать не так?

PS - Проблемы с реализацией MDI в целом - вопрос другой, я не задаюо MDI, но это может быть причиной того, что это происходит, поскольку изменение свойств компонентов, как известно, постоянно переключает внутренние свойства компонента, например, на TPanel, переключение «ParentBackground» на true, а затем обратно на false снова заставляет его работать должным образомпоказать указанный цвет при использовании XPMan.

Ответы [ 2 ]

6 голосов
/ 22 декабря 2011

IIRC устанавливает стиль формы на fsMDIChild, изменяя свойство Visible формы на True.Так что теперь, когда вы создаете форму, она видима по умолчанию ... измените свойство Visible формы обратно на False, и это должно завершить поведение "auto show".

0 голосов
/ 11 апреля 2014

Нельзя изменить свойство Visible на False в формах MDIChild.

Чтобы исправить автоматическое отображение форм MDIChild в Delphi 7, просто сделайте следующее:

  • Открыть проект-> Параметры
  • Выберите каждую дочернюю форму MDI в списке «Автоматическое создание форм» и нажмите Кнопка «>» для перемещения формы в список «Доступные формы».
  • Убедитесь, что только те формы, которые вы хотите создавать автоматически, например MDI Например, основная форма, форма входа и модули данных.

Нельсон Сантос

...