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

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

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

Вынес предстартовые действия формы1 в форму2 (там у меня проверка существования файлов, их закачка если нету и проверка обновления), но как сделать вызов формы 2 и ее закрытие так чтобы форма 1 не зациклевалась на этом? (у меня получается так что когда форма 2 вызывает форму1 и закрывается, форма 1 начинает вызывать вторую и так по кругу, да так что комп зависает )
У меня есть мысль что правильнее было бы поменять форму 1 и форму 2 поменять местами но ведь для этого нужно делать новый проект и все заного... как же все это сделать правильно?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2015, 14:24
Ответы с готовыми решениями:

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

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

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

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

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

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

В файле Program.cs.
C#
1
Application.Run(new MainForm());
1
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
17.09.2015, 14:51  [ТС] 3
В 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
5819 / 4696 / 2940
Регистрация: 20.04.2015
Сообщений: 8,359
17.09.2015, 15:08 4
Может я неправильно понял суть вопроса, но почему не вызывать 2-ю форму из обработчика загрузки первой формы?
C#
1
2
3
4
5
private void Form1_Load(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.ShowDialog();
}
0
TheGreatCornholio
1238 / 718 / 283
Регистрация: 30.07.2015
Сообщений: 2,392
17.09.2015, 15:17 5
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
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
17.09.2015, 15:47  [ТС] 6
Цитата Сообщение от Даценд Посмотреть сообщение
Может я неправильно понял суть вопроса, но почему не вызывать 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
5819 / 4696 / 2940
Регистрация: 20.04.2015
Сообщений: 8,359
17.09.2015, 16:11 7
Цитата Сообщение от 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
30 / 30 / 18
Регистрация: 16.09.2015
Сообщений: 246
17.09.2015, 16:22  [ТС] 8
С кнопкой все работает, но мне нужно как то без кнопочек обойтись и я удаляю кнопку и вместо нее делаю так:
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
5819 / 4696 / 2940
Регистрация: 20.04.2015
Сообщений: 8,359
17.09.2015, 16:34 9
Лучший ответ Сообщение было отмечено 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.09.2015, 16:34

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru