Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
5 / 5 / 2
Регистрация: 12.08.2011
Сообщений: 95

Подвисание формы при вызове Show()

01.11.2011, 19:11. Показов 1500. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такая ситуация: загружается главная форма и в событии Shown вызывается другая форма:

C#
1
2
3
4
5
private void MyForm_Shown(object sender, EventArgs e)
{
    MyForm2 mf2 = new MyForm2();
    mf2.Show();
}
При первом запуске Show() вторая форма подвисает при появлении (на несколько секунд появляются белые прямоугольники вместо контролов), затем всё становится нормально. Плюс, при первом появлении форма вылазит со всеми эффектами Win7. Если вызывать Hide(), затем снова Show(), то форма появляется сразу без подвисаний и эффектов. Поэтому вопрос - как создать форму сразу в таком состоянии, чтобы первый вызов Show() повлёк такое появление формы, как будто она уже была вызвана первый раз?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.11.2011, 19:11
Ответы с готовыми решениями:

При вызове одной формы скрывать другую
Помогите пжалста!!! Есть две формы, Form1 и форма Test. Test вызывается из Form1. Как сделать, чтоб при вызове Test скрыть Form1? Заранее...

Подвисание формы при перетаскивании
Добрый день. Есть следующая проблема. Рисую на компоненте ZedGraphControl график из большого числа точек, график во времени не...

Подвисание при прорисовке формы
Доброго времени суток. Возникала такая проблема. Раньше никогда не писал приложений с большим количеством картинок и фонов на форме, а...

10
Заблокирован
01.11.2011, 19:23
Chuckcha, у меня ничего не подвисает и открываются сразу две. Зачем тебе две открытые формы?
0
57 / 57 / 11
Регистрация: 07.03.2010
Сообщений: 157
01.11.2011, 19:32
Причина быстрого открытия второй формы второй раз заключается в том, что она уже была загружена в память и была просто скрыта. Поэтому в следующий раз ей потребовалось только показать себя. А не проводить некоторые методы.
0
5 / 5 / 2
Регистрация: 12.08.2011
Сообщений: 95
01.11.2011, 19:41  [ТС]
Цитата Сообщение от Genu Посмотреть сообщение
Причина быстрого открытия второй формы второй раз заключается в том, что она уже была загружена в память и была просто скрыта. Поэтому в следующий раз ей потребовалось только показать себя. А не проводить некоторые методы.
Вот именно это мне и нужно узнать - как заранее подгрузить всё нужное второй форме, чтобы сразу открыться быстро.
0
Заблокирован
01.11.2011, 20:07
Цитата Сообщение от Chuckcha Посмотреть сообщение
чтобы сразу открыться быстро.
Тебе надо именно при первом появлении главной формы?
Попробуй так. Проверить разницу не могу, потому что у меня и так быстро открывается.
C#
1
2
3
4
5
6
7
8
9
10
11
12
        Form2 mf2;
        public Form1()
        {
            InitializeComponent();
            mf2 = new Form2();
        }
 
        private void Form1_Shown(object sender, EventArgs e)
        {
            
            mf2.Show();
        }
0
5 / 5 / 2
Регистрация: 12.08.2011
Сообщений: 95
01.11.2011, 20:16  [ТС]
Цитата Сообщение от Indigo Посмотреть сообщение
Тебе надо именно при первом появлении главной формы?
Попробуй так. Проверить разницу не могу, потому что у меня и так быстро открывается.
C#
1
2
3
4
5
6
7
8
9
10
11
12
        Form2 mf2;
        public Form1()
        {
            InitializeComponent();
            mf2 = new Form2();
        }
 
        private void Form1_Shown(object sender, EventArgs e)
        {
            
            mf2.Show();
        }
То же самое. Возможно, дело в том, что я использую сторонние библиотеки для отрисовки формы (скины). Однако вопрос в силе - нужно как-то заранее подгрузить форму.
0
Заблокирован
01.11.2011, 20:29
Цитата Сообщение от Chuckcha Посмотреть сообщение
Возможно, дело в том, что я использую сторонние библиотеки для отрисовки формы (скины).
Ну а как тогда нам проверить?
Вот еще вариант.
В первой
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   public partial class Form1 : Form
    {
       public static bool b;
       Form2 mf2;
        public Form1()
        {
            InitializeComponent();
            mf2 = new Form2();
           
        }
 
        private void Form1_Shown(object sender, EventArgs e)
        {
 
            mf2.Show();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
           
            b = true;
            mf2.Show();
        }
    }
Во второй
C#
1
2
3
4
5
6
7
8
9
10
       public Form2()
        {
            InitializeComponent();
        }
        protected override void SetVisibleCore(bool value)
        {
            if (Form1.b == false) 
            base.SetVisibleCore(false);
            else base.SetVisibleCore(true);
        }
0
5 / 5 / 2
Регистрация: 12.08.2011
Сообщений: 95
01.11.2011, 21:32  [ТС]
Цитата Сообщение от Indigo Посмотреть сообщение
Ну а как тогда нам проверить?
Это не нужно проверять, я просто хочу понять, как можно подгрузить форму до показа

С вашим примером сейчас проверю, если это то что нужно.
0
Заблокирован
01.11.2011, 21:45
Попробуй еще так, если предыдущий вариант не подошел
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        Form2 mf2;
        public Form1()
        {
            InitializeComponent();
            mf2 = new Form2();
           
        }
 
        private void Form1_Shown(object sender, EventArgs e)
        {
            mf2.Opacity = 0;
            mf2.ShowIcon = false;
            mf2.ShowInTaskbar = false;
            mf2.Show();
          
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            mf2.ShowIcon = true;
            mf2.ShowInTaskbar = true;
            mf2.Opacity = 1;
        }
0
5 / 5 / 2
Регистрация: 12.08.2011
Сообщений: 95
01.11.2011, 21:56  [ТС]
Цитата Сообщение от Indigo Посмотреть сообщение
Попробуй еще так, если предыдущий вариант не подошел
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        Form2 mf2;
        public Form1()
        {
            InitializeComponent();
            mf2 = new Form2();
           
        }
 
        private void Form1_Shown(object sender, EventArgs e)
        {
            mf2.Opacity = 0;
            mf2.ShowIcon = false;
            mf2.ShowInTaskbar = false;
            mf2.Show();
          
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            mf2.ShowIcon = true;
            mf2.ShowInTaskbar = true;
            mf2.Opacity = 1;
        }
Вот этот хитрый вариант мне нравится Вопрос только в том - будет ли форма с нулевой непрозрачностью перехватывать клики мыши?
0
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
01.11.2011, 22:56
не будет, сделай 0.01 =) тогда всё ок) и ничего не видно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2011, 22:56
Помогаю со студенческими работами здесь

Подвисание формы при сканировании сети
Есть две формы. НА первой по нажатию на кнопочку происходит скан локальной сети. Выглядит это так string test_ip; Ping...

Подвисание формы при копировании файла
Всем дорого времени суток! Есть форма с кнопками "Выбор файла" и "Копирование". Когда идет процесс копирования с формой...

Подвисание формы при выполнении цикла
Здраствуйте уважаемые форумчани. Вот пишу игрушку "пятнашки". Дело в том что при перемещении кнопочек я использую анимацию- т.е. по...

Ошибка при вызове формы
private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e) { form2.Show(); } ...

Сбой программы при вызове формы
Добавил еще одну форму. В коде второй формы ничего не трогал, только дизайн изменил. Далее из первой формы пытаюсь вызвать по буттом вторую...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами 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 из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru