10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103

Динамически создаваемая форма и ее методы Show() и ShowDialog()

02.06.2012, 12:11. Показов 4688. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня приложение может в опред. моменты, в процессы работы, надолго погружаться в свои вычисления и чтобы как-то информировать пользователя об этом решил показывать доп. окно из другой создавемой формы. Если на форме есть label (или картинка и с ней аналогичная ситуация), то после создания этой доп. формы и вызова метода Show(), то label не отображается на этой форме. Если же вызвать метод ShowDialog(), то эта метка отображается, но приходится уже пользователю кликать по доп. форме для ее закрытия т.к. она становится модальной. Идея была в том чтобы главный поток приложения мог бы по окончании своих вычислений закрыть это окно доп. формы. Подскажите, что не так делаю. Код тут очень простой как писал. Проверял и в отдельном потоке - тоже самое. С картинкой на форме - такая же ситуация как и с меткой.
C#
1
2
3
4
5
6
            // создаем новую диалоговую форму типа Form2
            Form2 form2 = new Form2();
            form2.Show();     // если здесь form2.ShowDialog(); , то потом Close() не закроет
            // ждем сигнала об завершении потока
            while(!ShouldStop);  // если в главном потоке все создавать, то такая же ситуация
            form2.Close(); // еще вызывал разные др. методы - без толку
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2012, 12:11
Ответы с готовыми решениями:

Show() и showdialog()
У меня созданы 2 формы. При нажатии на кнопку на первой форме открывается вторая (методом Show()) и закрывается как только получило...

Как передать данные между формами, без Show/ShowDialog
Есть 3 формы: 1. MainForm, которая является меню и родительской формой, на ней имеются кнопки в виде toolstrip, которые, запускают...

ShowDialog форма не закрывается
Доброго времени суток, возникла проблема. Есть форма с гридой, по даблклику по ячейке вызываю модальное окно: private void...

2
 Аватар для Vermilion
200 / 168 / 38
Регистрация: 21.10.2011
Сообщений: 178
02.06.2012, 12:57
BackgroundWorker вам в помощь. Также можете во второй форме смотреть прогресс операции (ProgressChanged event)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
readonly Form2 frm = new Form2();
private void button1_Click(object sender, EventArgs e)
{
    using (BackgroundWorker bkg = new BackgroundWorker())
    {
        bkg.DoWork += bkg_DoWork; //что делаем
        bkg.RunWorkerCompleted += bkg_RunWorkerCompleted; //ивент по завершению
        bkg.RunWorkerAsync(); //запускаем
    }
    frm.ShowDialog(); //отображает форму Loading
}
 
        
void bkg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    frm.Close(); //закрываем форму Loading
}
 
void bkg_DoWork(object sender, DoWorkEventArgs e)
{
    System.Threading.Thread.Sleep(5000); //тут спим, чтобы увидеть появление/закрытие формы Loading
}
1
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
02.06.2012, 14:20  [ТС]
Спасибо - сейчас проверю (минут 10-15). Но у Вас тоже ShowDialog() метод вызывается для второй формы - это значит она будет модальной (т.е. останавливает родительское приложение и должна ждать от пользователя каких-либо действий и потом может закрыться ее окно). Но сейчас проверю конечно. А вот с методом Show() у дочернего окна не отображаются метки на нем(или рисунок) у меня. Сейчас...

Добавлено через 31 минуту
Vermilion, большое-пребольшое Вам спасибо. Я пока не пойму как, но вроде рабоает такая вещь!! Я сейчас просто(также как у Вас в коде) покамест на Sleep() проверял - т.е с "засыпанием". Пока не проверил с включением этих своих длительных вычислений т.к. они очень долго идут(минут 15 где-то). Спасибо. Пока не понял как это работает - я до этого просто отдельный поток создавал, в нем создавал дочернее второе окно и в конце вычислений потоку слал событие чтобы закрыл эту вторую форму, но с ShowDialog() у нее она потом не закрывалась, а с Show() у нее не все отображалось. Спасибо.

Добавлено через 16 минут
Да все работает и с этими длит. вычислениями. Я просто метод этих вычислений поставил в метод bkg_DoWork() и все. Получается, что если бы я раньше у себя также в другом создаваемом потоке эти вычисления поставил, то у меня бы тоже заработало?? Я раньше вычисления в главном потоке делал, а доп. потоку слал события чтобы он просто вначале открыл, а потом закрыл вторую форму. Но в другом потоке нельзя же иметь доступ к компонентам/классам из основного потока?? Надо проверить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2012, 14:20
Помогаю со студенческими работами здесь

Изменить свойства формы после ShowDialog (форма состояния)
Доброго времени суток! Подскажите, проще реализовать эту задачу - Есть две формы, одна основная (форма1), в которой крутится весь код,...

Динамически создаваемая форма
Доброго дня! Имеет форма с кучей наворотов с т.ч. фреймы. Мне нужно ожидать в потоке, пока форма не создастся полностью. Если ли...

show и showdialog
назадача получилась у мен код программы:private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { ...

Cannot set Visibility or call Show or ShowDialog after window has closed.
Из диалогового окна пытаюсь передать данные так: Диалоговое окно public partial class Start_window : Window { public...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru