Установка родителя формы
У меня есть форма Windows, из которой я хотел бы открыть форму статуса, в которой говорится: "Сохранение..."
а затем исчезает, когда сохранение завершено. Я хотел бы сосредоточить эту небольшую форму статуса в середине вызывающей формы. Я пробовал установить свойство "StartPosition" на "CenterParent", но он действительно работает. Я создаю статусную форму из другой формы следующим образом:
SavingForm saving = new SavingForm();
savingForm.Show();
Thread.Sleep(500); //Someone said this is bad practice ... why?
savingForm.Close();
Не будет ли вызывающая форма "родителем"?
Когда я устанавливаю часы для сохранения, он говорит, что у него нет родителя.
Я пробовал:
SavingForm saving = new SavingForm();
saving.Parent = this;
savingForm.Show();
Thread.Sleep(500);
savingForm.Close();
и он генерирует исключение. Элемент управления верхнего уровня не может быть добавлен в элемент управления.
Как центрировать это окно состояния в вызывающем окне?
Заранее спасибо
Ответы
Ответ 1
я сделал бы что-то вроде этого:
SavingForm saving = new SavingForm();
savingForm.ShowDialog(this);
В SavingForm я запустил бы таймер в обработчике нагрузки, который длится 500 миллисекунд, а затем закрывает форму. Чище это. ShowDialog также заблокирует ваш пользовательский интерфейс, чтобы отображать только сохраненную форму и не позволять пользователю обезьян ничего.
Ответ 2
Используйте это:
saving.Show(this);
Чтобы установить владельца, когда вы показываете форму.
Изменить: Метод ShowDialog()
также имеет перегрузку, которая позволяет указать владельца, если это маршрут, по которому вы решили:
saving.ShowDialog(this);
Ответ 3
Если вы передаете родитель (this
) Владельцу, например,
SavingForm saving = new SavingForm() { Owner = this };
затем вы можете получить доступ к свойствам и методам владельца при условии, что для их Modifier
установлено значение Internal
или Public
(вы можете редактировать модификатор непосредственно в исходном коде или через свойства дизайнера форм - есть Modifier
свойство для каждого элемента управления).
Примечание. Передача, например, saving.Show(this);
или saving.ShowDialog(this);
, в моем случае не помогла.