|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
Показать форму только тогда, когда закончилась прорисовка всех элементов управления01.04.2015, 15:06. Показов 3513. Ответов 19
Метки нет (Все метки)
Здравствуйте!
Вопрос по Windows Forms. На форме есть много комбобоксов, текстбоксов и кнопок. После выполнения определенной функции они начинают заполняться. На форме прорисовка этих элементов происходит поочереди, что выглядит не красиво. Хочу перед выполнением функции форму скрывать(или картинку ожидания показывать), а когда прорисуются все элементы, тогда всё разом показать. Подскажите, есть ли какая-нибудь функция или событие об окончании прорисовки элемента?
0
|
|
| 01.04.2015, 15:06 | |
|
Ответы с готовыми решениями:
19
Определите предикат p(+U, +V, ?L) - истинный тогда и только тогда, когда L - список всех элементов, содержащихся либо в списке U, либо в списке V. Выдать Yes тогда и только тогда, когда X и Y являются соседними элементами в списке S
|
|
|
||||||
| 01.04.2015, 16:32 | ||||||
|
Попробуйте включить двойную буффиризацию.
К стати у формы помоему даже в свойствах задать можно. Если не поможет - будем думать.
1
|
||||||
|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
| 01.04.2015, 16:38 [ТС] | |
|
Пробовал двойную буферизацию - всё равно, всё одно за другим отображается...
Совсем голову сломал...
0
|
|
|
|
|
| 01.04.2015, 16:46 | |
|
Ясно. Тогда не в отрисовке дело. Значит нужно дождаться пока у вас все необходимые контролы создадутся и заполнятся , а за тем их вывести на форму. Ну типа запустили метод который создает и заполняет ваши контролы , но на форму их не выводим как вариант (visible = false), а как только метод отработал всем своим новоиспеченным и обновленным контролам делаем visble = true. Подойдет такой выриант?
Добавлено через 1 минуту Стоп или они не создаются а только перерисовываются? Добавлено через 1 минуту Проект можно глянуть?
0
|
|
|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
| 01.04.2015, 16:51 [ТС] | |
|
Они только перерисовываются. Контролы создаются 1 раз. С visible делал. После окончания метода ставил визибл в трю и они начинают поочереди рисоваться на форме.
Добавлено через 2 минуты проект большой - это БД. Программа будет работать только из ЛВС нашей компании. Подключение к БД и т.д.
0
|
|
|
|
|
| 01.04.2015, 16:55 | |
|
Видимо у вас сам метод (или методы) сборки информации , которая выводится в контролы медленно работает. Тогда можно дождаться пока собирем всю инфу для отображения в контролах, собирая её например в List , а как только сбор инфы закончен вывести все в нужные контролы. Может так?
1
|
|
|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
| 01.04.2015, 17:03 [ТС] | |
|
Идея хорошая ))) правда код увеличится... Думаю, если других вариантов нет - так и сделаю.
Заметил такой момент: У меня эти контролы находятся в элементе panel1. Соответственно когда элементы постепенно прорисовываются, тогда и запускается каждый раз событие Paint. Можно ли как то отловить последний вызов события Paint? Тогда я пойму когда все контролы появились.
0
|
|
|
|
|
| 01.04.2015, 17:09 | |
|
Это про событие https://msdn.microsoft.com/ru-... .110).aspx
засунте туда переменную счетчик и обнуляете ее при каждом запуске вашего (назавемего) медленного метода. Только великого смысла я в этом не вижу. Не легчели по окончанию работы медленного метода генерить событие его окончания?
0
|
|
|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
| 01.04.2015, 17:17 [ТС] | |
|
Я по окончании этого долгого метода ставлю визибл трю этой панели и начинается постепенная прорисовка контролов в ней. Вообще не соображаю почему они сразу не появляются... Думаю в коде где то напортачил...Буду капать...
Спасибо за помощь )))
0
|
|
|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
| 01.04.2015, 17:30 [ТС] | |
|
Да нет - там данные до метода уже прочитаны и в DataTable находятся. Оттуда и беру. Эх... всю башку сломал...
0
|
|
|
Администратор
|
|
| 01.04.2015, 17:52 | |
|
SailarmoonKS, если у контрола есть методы BeginUpdate/EndUpdate, то следует пользоваться ими.
0
|
|
|
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
|
|
| 01.04.2015, 21:14 | |
|
SailarmoonKS, а если создать вторую форму которая будет выпадать на ней будет прогресс бар, а прошлая форма будет недоступна, пока не закроется вторая. Вторая по завершению прогресс бара, закроется.
1
|
|
|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
| 07.04.2015, 14:07 [ТС] | |
|
lokilo, хотелось бы не использовать заставку. Это в том случае буду делать, если совсем ничего не придумать.
OwenGlendower, а можно поподробнее что это за волшебные методы?
0
|
|
|
Администратор
|
|
| 07.04.2015, 14:19 | |
|
SailarmoonKS, метод BeginUpdate блокирует перерисовку элемента управления до момента вызова EndUpdate.
1
|
|
|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
| 09.04.2015, 09:09 [ТС] | |
|
Спасибо за подсказки, попробую прикрутить этот метод )))
0
|
|
|
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 7
|
|
| 08.05.2015, 06:52 | |
|
SailarmoonKS Привет!
Проблему решил? У меня такая же ситуация. Помоги с ответом!
0
|
|
|
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
|
|
| 14.05.2015, 08:28 [ТС] | |
|
В принципе более менее помогла двойная буферизация - чуток ускорила проявление контролов на форме. Но всё равно заметно как они по очереди появляются. Оставил как есть. Не критично, но просто глаза мозолит. Посмотри у себя в коде места, где формируются коллекции элементов (комбобоксы, листбоксы, тривью и т.д.) - попробуй сделать их заполнение попроще(чтобы меньше времени занимали). Поменьше мест, где у тебя визибл то в трю, то в фолсе переходят. Если заполнение совсем долго, то выводи какую нибудь заставку. У меня заставка в другой форме сделана и запускается не как дочернее окно, а как application - так удобнее. Одна заставка на любые долгие операции.
Вот код про двойную буферизацию: #region Двойной буфер void SetDoubleBuffered(Control c, bool value) { PropertyInfo pi = typeof(Control).GetProperty("DoubleBuffe red", BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic); if (pi != null) { pi.SetValue(c, value, null); MethodInfo mi = typeof(Control).GetMethod("SetStyle", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic); if (mi != null) { mi.Invoke(c, new object[] { ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true }); } mi = typeof(Control).GetMethod("UpdateStyles" , BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic); if (mi != null) { mi.Invoke(c, null); } } } #endregion А В самом коде, например для датагрид SetDoubleBuffered(datagridview1, true); В Добавлено через 1 минуту увлекаться с двойной буферизацией тоже не стоит. Общий процесс загрузки программы начинает тормозится - причем довольно мощно. Я все свои контролы на панели разместил и применил буферизацию для панели
1
|
|
|
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 7
|
|
| 14.05.2015, 09:10 | |
|
Спасибо огромное!
Буду пробовать.
0
|
|
| 14.05.2015, 09:10 | |
|
Помогаю со студенческими работами здесь
20
Теорема Последовательность {xn : n ∈N} сходится тогда и только тогда, когда она ограничена и имеет единственный частичный предел
Доказать, что A · B = {ab | a ∈ A, b ∈ B} — это подгруппа в G тогда и только тогда, когда A · B = B · A Число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3 Известно, что число делится на три тогда и только тогда, когда сумма его цифр делится на три. Проверим этот признак для заданного трехзначного числа X Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|