Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
3 / 3 / 0
Регистрация: 15.10.2018
Сообщений: 227

Загрузка основной формы приложения

07.03.2019, 10:10. Показов 2073. Ответов 13

Студворк — интернет-сервис помощи студентам
Уважаемые коллеги помогите решить задачку.

Столкнулся на днях с проблемой над которой бьюсь уже несколько дней.

Суть проблемы такова.

Написал форму для запуска основной формы , так называемый splash screen . Самое интересное при запуске из VS всё работает замечательно . Идёт загрузка и появляется основная форма . Но когда запускаю после создания билда через созданный exe у меня почему-то после загрузки заставки основная форма сворачивается в панель задач.

Очень прошу помогите решить єту проблему

Привожу свой код

Form_START - тот самый splash screen
Form1 - основная форма

Код таймера на Form_START

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void timer1_Tick(object sender, EventArgs e)
        {
            progressBar1.Increment(1);
            if(progressBar1.Value == 100)
                timer1.Stop();
            //Form1 f1 = new Form1();
            //this.Hide();
            //f1.Show();
            
            
            //this.Opacity == 0.9;
            //if (this.Opacity == 1)
            //{
            //                
            //}
        }
 
        private void Form_START_Load(object sender, EventArgs e)
        {
            //timer1.Start();
        }
Код Form1

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Threading;//Splash
 
namespace Progect_CHORNOBYL
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            //Splash
            Thread t = new Thread(new ThreadStart(SplashStart));
            t.Start();
            Thread.Sleep(4000);
            //Splash
            InitializeComponent();
 
            //Splash
            t.Abort();
            //Form1 F1_med = new Form1();
            ////F1_med.Show();
            //F1_med.Activate();
           
            
        }
 
        public void SplashStart()//Splash
        {
            Application.Run(new Form_START());        
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2019, 10:10
Ответы с готовыми решениями:

Заставка при загрузке основной формы приложения
Добрый день, форумчане. Такой вопрос: при запуске приложения сперва запускается форма авторизации, а потом открывается основная форма...

Сохранение и загрузка данных. Настройки второй формы хранятся до первого закрытия приложения
Есть родительская форма и дочерняя В дочерней сохраняю файлы через StreamWriting и все сохраняется И если закрыть только дочернюю,а...

Ссылка из дочерней формы на массив основной формы
Доброго утра :) Подскажите, как легче всего и правильнее ссылаться на массив в коде основной формы, находясь в коде дочерней формы? У...

13
7 / 7 / 0
Регистрация: 09.02.2019
Сообщений: 27
07.03.2019, 12:16
Попробуйте добавить в метод инициализации.
C#
1
this.WindowState = FormWindowState.Maximized;
останавливать поток через abort не рекомендую.
0
3 / 3 / 0
Регистрация: 15.10.2018
Сообщений: 227
07.03.2019, 12:49  [ТС]
Цитата Сообщение от Marcus Lipton Посмотреть сообщение
this.WindowState = FormWindowState.Maximized;
Этот параметр на форме установлен

Цитата Сообщение от Marcus Lipton Посмотреть сообщение
останавливать поток через abort не рекомендую.
А как иначе остановить процесс ?
1
4 / 4 / 0
Регистрация: 06.01.2013
Сообщений: 18
07.03.2019, 12:58
тоже интересен вопрос с завершением потоков. у меня они корректно завершаются только через аборт
0
7 / 7 / 0
Регистрация: 09.02.2019
Сообщений: 27
07.03.2019, 16:38
Вместо потоков лучше использовать backgroundWorker

Запускать удобно через
C#
1
RunWorkerAsync();
и останавливать
C#
1
CancelAsync();
Только значение WorkerSupportsCancellation должно быть активно

Работает без нагрузок на интерфейс в фоновом потоке


Цикл DoWork делается так
C#
1
2
3
4
while (!backgroundWorker1.CancellationPending)
{
//код
}
1
3 / 3 / 0
Регистрация: 15.10.2018
Сообщений: 227
08.03.2019, 17:00  [ТС]
Цитата Сообщение от Marcus Lipton Посмотреть сообщение
Вместо потоков лучше использовать backgroundWorker
В примерах нашёл как его запускать через кнопку .

А как с ним работать при запуске splash screen ?

(Если можно , пример)
0
13 / 11 / 2
Регистрация: 07.03.2019
Сообщений: 29
08.03.2019, 19:59
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private static SplashForm splashForm;
        [STAThread]
        static void Main()
        {
            splashForm = new SplashForm();
            Thread thread = new Thread(Start);
            thread.Start();
            Application.Run(splashForm);
        }
        private static void Start()
        {
            MainForm form = new MainForm();
            splashForm.Invoke(new Action(splashForm.Close));
            form.Load += (sender, args) => { form.Activate(); };
            Application.Run(form);
        }


Добавлено через 15 минут
Все-таки вот так будет правильнее (основная форма останется в основном потоке):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    static class Program
    {
        [STAThread]
        static void Main()
        {
            SplashForm splashForm = null;
            new Thread(() =>
                       {
                           splashForm = new SplashForm();
                           Application.Run(splashForm);
                       }).Start();
            MainForm form = new MainForm();
            form.Load += (sender, args) =>
                         {
                             form.Activate();
                             if (splashForm != null) splashForm.Invoke(new Action(splashForm.Close));
                         };
            Application.Run(form);
        }
    }
2
3 / 3 / 0
Регистрация: 15.10.2018
Сообщений: 227
09.03.2019, 17:15  [ТС]
Цитата Сообщение от xewelus Посмотреть сообщение
основная форма останется в основном потоке
Спасибо большое . Но я никак понять не могу как ваш код прикрутить к своему из первого поста ?
Куда мне что добавить?
Просто у меня на форме (Form_START) висит таймер и прогрессбар , а про таймер в Вашем коде ничего не сказано.
0
13 / 11 / 2
Регистрация: 07.03.2019
Сообщений: 29
09.03.2019, 17:18
А зачем там таймер?
0
3 / 3 / 0
Регистрация: 15.10.2018
Сообщений: 227
09.03.2019, 17:55  [ТС]
А как иначе указать программе по истечению какого промежутка времени запускать основную форму ?
0
13 / 11 / 2
Регистрация: 07.03.2019
Сообщений: 29
09.03.2019, 17:58
В моем примере, когда основная форма будет полностью создана, то она сразу же покажется, а сплеш закроется.
Искусственно задерживать показ сплеша считаю неправильным.
0
3 / 3 / 0
Регистрация: 15.10.2018
Сообщений: 227
09.03.2019, 18:07  [ТС]
Цитата Сообщение от xewelus Посмотреть сообщение
Искусственно задерживать показ сплеша считаю неправильным.
Дело в том что основная форма грузится моментально . Сплеш хочу создать для красоты.
Да и собственно в самой среде всё отлично работает. Траблы начинаются после компиляции и при запуске через exe.

Может подскажете что подправить в моём коде ?
0
13 / 11 / 2
Регистрация: 07.03.2019
Сообщений: 29
09.03.2019, 18:22
Цитата Сообщение от shadow_2 Посмотреть сообщение
Сплеш хочу создать для красоты.
Это в каком приложении такое применяется?

Ну если так уж стоит задача, то:
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
25
26
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.Run(new SplashForm());
            Application.Run(new MainForm());
        }
    }
 
    public partial class SplashForm : Form
    {
        public SplashForm()
        {
            InitializeComponent();
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            this.progressBar1.Value++;
            if (this.progressBar1.Value == this.progressBar1.Maximum)
            {
                this.Close();
            }
        }
    }
1
3 / 3 / 0
Регистрация: 15.10.2018
Сообщений: 227
09.03.2019, 20:37  [ТС]
Цитата Сообщение от xewelus Посмотреть сообщение
Ну если так уж стоит задача, то:
Спасибо за код.

Но почему-то не работает .
Вернее даже не так . Грузится заставка и после этого загружается абсолютно новая пустая форма.
Делал всё как было написано.

Этот кусок кода

C#
1
2
3
4
5
static void Main()
        {
            Application.Run(new SplashForm());
            Application.Run(new MainForm());
        }
переписал под себя таким образом

C#
1
2
Application.Run(new Form_START());
            Application.Run(new Form1());
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2019, 20:37
Помогаю со студенческими работами здесь

Закрытие основной формы из других
Главная форма: Hide(); Form2 f2 = new Form2(); f2.Show(); Главная форма скрыта, переходит на 2 форму. Если вторую форму закрыть ,...

Закрепление дополнительной формы к основной
Здравствуйте, уважаемые форумчане! Имеется основная форма(Form1), которая имеет достаточно большие размеры по высоте. есть определенная...

Вызов метода основной формы из UserControl
Привет! Перехожу от VB VS6 к VS10 WF C# и пока ломаю мозги для работы по новому. Суть проблемы в том что есть основная форма на которой...

Открытие дополнительной формы и закрытие основной
if (MessageBox.Show("Обновление сейчас начнётся, подождите немного.", "Спасибо за терпение!", MessageBoxButtons.OKCancel,...

Как обращаться основной формы из других форм?
Помогите, пожалуйста! Есть 2 формы Form1 и Form2. У обеих форм есть поля типа public id, dtime, dwhat. При старте программы...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru