Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246

Форма 1 вызывает форму 2, форма 2 закрывается, форма 1 продолжает работать дальше

17.09.2015, 14:24. Показов 3987. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вынес предстартовые действия формы1 в форму2 (там у меня проверка существования файлов, их закачка если нету и проверка обновления), но как сделать вызов формы 2 и ее закрытие так чтобы форма 1 не зациклевалась на этом? (у меня получается так что когда форма 2 вызывает форму1 и закрывается, форма 1 начинает вызывать вторую и так по кругу, да так что комп зависает )
У меня есть мысль что правильнее было бы поменять форму 1 и форму 2 поменять местами но ведь для этого нужно делать новый проект и все заного... как же все это сделать правильно?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2015, 14:24
Ответы с готовыми решениями:

Не закрывается форма 1, а после вызова формы 2, форма 1 дублируется несколько раз
имеется форма, на ней кнопка. нажимаю и открывается новая форма, но старая снова появляется неограниченное количество раз код 1...

Добавление записи в Listview(1 форма) через Диалоговое окно(3 форма) другой формы (2 форма)
Всем доброго дня и с наступающими праздниками! Знаю, тема 7 частых вопросов по WinForms уже не раз обсуждалась, и была прочитана, но или...

первая форма вызывает вторую форму передавая некоторые параметры, как во время закрытия 2-й формы передать из нее данные в 1-ю?
Во время обработки события в первой форме я вызываю вторую форму, в которой пользователь выбирает Дату, после чего требуется для дальнейшей...

8
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
17.09.2015, 14:42
Цитата Сообщение от aurisdies Посмотреть сообщение
У меня есть мысль что правильнее было бы поменять форму 1 и форму 2 поменять местами но ведь для этого нужно делать новый проект и все заного...
Вовсе нет.
Цитата Сообщение от aurisdies Посмотреть сообщение
как же все это сделать правильно?
Пусть вторая вызовет первую перепиши чуть совсем архитектуру программы.

И перепиши строку, например, написав, new SecondForm().

В файле Program.cs.
C#
1
Application.Run(new MainForm());
1
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
17.09.2015, 14:51  [ТС]
В program.cs вызвал вторую форму
C#
1
  Application.Run(new Form2());
В ней
C#
1
2
3
4
5
6
7
8
9
10
11
       
     if (System.IO.File.Exists("r15_updater.exe"))
            {
                Form1 r15launcher = new Form1();
                r15launcher.Show();
                this.Hide();
            }
            else
            {
                dwnldUpdater();
            }
И форма 2 не закрывается, тоже самое с Hide();. A this.Close(); и Close(); закрывает обе формы. Что я делаю не так?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.09.2015, 15:08
Может я неправильно понял суть вопроса, но почему не вызывать 2-ю форму из обработчика загрузки первой формы?
C#
1
2
3
4
5
private void Form1_Load(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.ShowDialog();
}
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
17.09.2015, 15:17
C#
1
r15launcher.ShowDialog();
Но, когда ты закроешь r15launcher форму, всплывет начальная, поэтому тебе нужно сделать так,
чтобы при закрытии r15launcher закрывалась программа. Щас подумаю че к чему.

Добавлено через 7 минут
В Form1, при ее закрытии кроешь по пути и Form2.
C#
1
2
3
4
5
6
7
8
9
        public T GetForm<T>() where T : Form
        {
            return (T) Application.OpenForms[typeof(T).Name];
        }
 
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            GetForm<Form2>().Close();
        }
0
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
17.09.2015, 15:47  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
Может я неправильно понял суть вопроса, но почему не вызывать 2-ю форму из обработчика загрузки первой формы?
так и делаю изначально.

вот в первой форме:
C#
1
2
3
4
5
void updater()
        {
            Form2 updater = new Form2();
            updater.ShowDialog();
        }
вот во второй форме

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  public void ChInstall1()
        {
            if (System.IO.File.Exists("r15_updater.exe"))
            {
               // Form1 Rl = Form1();
               // Rl.Show();
                this.Close();
                                            
            }
            else
            {
                dwnldUpdater();
            }
        }
так вторая форма сразу закрывает программу, а если раскомментировать создание новой формы то форма 1 вызывает форму 2 и это зацикливается. потому что в форме 1 вызов второй формы сразу после InitializeComponent();

Добавлено через 22 минуты
что то плохо понял,
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Но, когда ты закроешь r15launcher форму, всплывет начальная, поэтому тебе нужно сделать так,
чтобы при закрытии r15launcher закрывалась программа. Щас подумаю че к чему.
мне нужно чтобы сперва открылась Form2, выполнила действия закрылась, а потом уже Form1. Если в program.cs - Application.Run(new Form1()); то у меня Form2 вызывается из Form1 вот таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
public Form1()
        {
            InitializeComponent();
            updater();
   }
 
void updater()
        {
            Form2 updater = new Form2();
            updater.ShowDialog();
        }
а в Form2 я пишу так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  public Form2()
        {
            InitializeComponent();
            ChInstall1();
        }
 
      public void ChInstall1()
        {
            if (System.IO.File.Exists("r15_updater.exe"))
            {
               // Form1 Rl = Form1();
               // Rl.Show();
                this.Close();
                                            
            }
            else
            {
                dwnldUpdater();
            }
        }
так вторая форма закрывает программу вообще, а если раскомментировать создание новой формы то форма 1 вызывает форму 2 и это зацикливается. потому что в форме 1 вызов второй формы сразу после InitializeComponent();

А ЕСЛИ В в program.cs - Application.Run(new Form2()); то я вызываю Form1 из Form2 вот таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public Form2()
        {
            InitializeComponent();
            ChInstall1();
        }
 
       public void ChInstall1()
        {
            if (System.IO.File.Exists("r15_updater.exe"))
            {
                Form1 r15launcher = new Form1();
                r15launcher.Show();
                this.Hide();
                                          
            }
            else
            {
                dwnldUpdater();
            }
        }
И тогда у меня открыты срау обе формы, а мне бы нужно чтобы Form2 закрылась оставив только Form1. Вот никак не получается.... Но на сколько я понял, Вы написали мне о чем я еще не догадавыюсь потому что не сталкнулся, потому что не знаю чего ожидать...

Добавлено через 6 минут
Может быть вы не понимаете потому что я туплю на чем то элементарном, я вот тока позавчера начал в C# вникать...
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.09.2015, 16:11
Цитата Сообщение от aurisdies Посмотреть сообщение
так вторая форма сразу закрывает программу
не должна.
Вот код первой формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
 
   private void Form1_Load(object sender, EventArgs e)
   {
       Form2 form2 = new Form2();
       form2.ShowDialog();
   }
}
Вот код второй формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}
В program.cs:
C#
1
Application.Run(new Form1());
При запуске программы загружается вторая форма, после щелчка по кнопке она закрывается, после чего отображается первая форма.
1
33 / 33 / 18
Регистрация: 16.09.2015
Сообщений: 246
17.09.2015, 16:22  [ТС]
С кнопкой все работает, но мне нужно как то без кнопочек обойтись и я удаляю кнопку и вместо нее делаю так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void hidethisform()
        {
            this.Close();
        }
public void ChInstall1()
        {
            if (System.IO.File.Exists("r15_updater.exe"))
            {
                hidethisform();
            }
            else
            {
                dwnldUpdater();
            }
        }
И тут при старте программы вылетает ошибка:"Доступ к ликвидированному объекту невозможен. Имя объекта Form2."
По моему это странно... вот в чем разница? я нажимал на кнопку и форма 2 закрывалась, без ошибки открывалась Форма1. А теперь когда событие происходит не по кнопке а исходя из условий if то вылетает ошибка...
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.09.2015, 16:34
Лучший ответ Сообщение было отмечено aurisdies как решение

Решение

Вот код формы без кнопки. Все работает.
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
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
 
    private void Form2_Load(object sender, EventArgs e)
    {
        ChInstall1();
    }
 
    void hidethisform()
    {
        this.Close();
    }
 
    public void ChInstall1()
    {
        if (false) //при true тоже все работает
        {
            MessageBox.Show("NO");
            hidethisform();
        }
        else
        {
            MessageBox.Show("OK");
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.09.2015, 16:34
Помогаю со студенческими работами здесь

Простая форма веб-форма для сложения двух чисел не работает
Не работает скрипт для подсчета сложения.Может я неправильно привязал обработчик события(клик на кнопку подсчитать)? Вот код: ...

Форма авторизации - вне зависимости от выбранного пользака, открывается одна и та же форма
Форма авторизации - вне зависимости от выбранного пользака, открывается одна и та же форма Есть два пользака - главбух и ведущий бух В...

Ошибка инициализации модуля: Документ.Заказ.Форма.ФормаДокумента.Форма
Добрый вечер! Помогите мне пожалуйста! В программе 1С Предприятие 8.3 я создал регистр сведений ЦеныНаБилеты, создал справочник...

Чтобы форма (иконка форма) не показывалась в панели задач Windows
как сделать так чтобы форма (иконка форма) не показывалась в панели управления там где пуск и все дела?

Форма с компьютера и форма отправленная с моб устройства работают по-разному
Ребята, я новичок, подскажите пожалуйста. У меня есть форма, которую заполняет на сайте посетитель (например). При заполнении формы с...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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