С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
6 / 6 / 3
Регистрация: 20.04.2012
Сообщений: 303

Переход от одной формы к другой и ошибка при закрытии одной из них

08.06.2012, 11:37. Показов 5090. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть 2 формы. Из одной перехожу во вторую по нажатию кнопки, со второй возвращаюсь в первую 2мя способами: 1) при закрытии формы2 крестиком 2) при нажатии кнопки "Назад".
Проблемма: Если я закрываю форму2 и появляется форма1 и я выхожу из приложения(закрываю его) то оно нормально закрывается. А вот если я из формы2 нажимаю "Назад" и появляется форма1 то при ее закрытии выдает ошибку:
InvalilOperationException was unhandled
Коллекция была изменена;невозможно выполнить операцию перечесления.

Вот коды:
при нажатии открывается форма2
C#
1
2
3
4
5
6
7
        
private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form7 f2 = new Form2();
            f7.Show();
        }
кнопка "Назад" на форме2
C#
1
2
3
4
5
6
private void button7_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form1 f1 = new Form1();
            f1.Show();
        }
закрытие крестиком формы2
C#
1
2
3
4
5
6
protected override void OnFormClosing(FormClosingEventArgs e)
        {
            this.Hide();
            Form1 f1 = new Form1();
            f1.Show();
        }
закрытие формы1
C#
1
2
3
4
protected override void OnFormClosing(FormClosingEventArgs e) 
        {
            Application.Exit();
        }
вот почему коды одинаковые что "Назад" что закрытие формы2, но при закрытии формы1 если мы на нее перешли кнопкой "Назад" - ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.06.2012, 11:37
Ответы с готовыми решениями:

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

Переход от одной формы к другой при нажатии кнопки
Можете подсказать, пожалуйста. У меня есть form2, которая имеет кнопку. При нажатии кнопки активируется form4 в которую автоматически...

При закрытии одной формы и переходе на другую выходит ошибка
implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var a:string; begin

4
 Аватар для Vermilion
200 / 168 / 38
Регистрация: 21.10.2011
Сообщений: 178
08.06.2012, 12:15
Цитата Сообщение от mikh Посмотреть сообщение
C#
1
2
3
this.Hide();
 Form1 f1 = new Form1();
 f1.Show();
Прячем текущую, создаем новый экземпляр первой, показываем немодально

Цитата Сообщение от mikh Посмотреть сообщение
C#
1
2
3
this.Hide();
 Form7 f2 = new Form2();
 f7.Show();
Прячем текущую, создаем новый экземпляр второй, показываем немодально

В итоге вы наплодили кучу спрятанных от пользователя форм
Цитата Сообщение от mikh Посмотреть сообщение
InvalilOperationException was unhandled
Коллекция была изменена;невозможно выполнить операцию перечесления.
И ещё пытаетесь по коллекции где-то пройтись

Цитата Сообщение от mikh Посмотреть сообщение
закрытие крестиком формы2
Закрывайте методом Close(), Hide просто прячет окно от пользователя

Полный код хотелось бы увидеть, ибо тут нет фрагмента, вызвавшего эксепшн
0
6 / 6 / 3
Регистрация: 20.04.2012
Сообщений: 303
08.06.2012, 14:22  [ТС]
Цитата Сообщение от Vermilion Посмотреть сообщение
Закрывайте методом Close(), Hide просто прячет окно от пользователя
смотрите: запускается программа, запускается форма1 потом форма1 прячется и запускается форма2. Форму2 закрываем и создается форма1 еще раз если постоянно писать Form1 f1 = new Form1(); ?
если так, то даже закрывая форму2 получается я напложу много форм1?
как тогда прятать и показывать форму1 если без Form1 f1 = new Form1(); оно ругается на f1.Visible = true;

а при нажатии "Назад" я получается создаю 2 формы1 сразу ?

C#
1
2
3
4
5
6
private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
            Form1 f1 = new Form1();
            f1.Show();
        }
C#
1
2
3
4
5
6
protected override void OnFormClosing(FormClosingEventArgs e)
        {
            this.Close();
            Form1 f1 = new Form1();
            f1.Visible = true;
        }
Добавлено через 8 минут
так ведь можно просто постоянно прятать их по очереди не создавая новых экземпляров ?
а закрывать программу только при закрытии формы1.
для этого нужно при нажатии на крестик не закрывать форму2 а просто прятать и показывать форму1.
подскажите как писать в кнопках Hide и Show что бы не создавать новые копии.

Добавлено через 32 минуты
ладно скрывать по очередно нет надобности, главное скрывать форму1 а при закрытии формы2 снова отображать форму1.
попробовал так:
открываю форму2 ShowDialog и скрываю форму1
C#
1
2
3
4
5
6
private void button1_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            Form7 f2 = new Form2();
            f2.ShowDialog();
        }
при закрытии формы2 окно формы1 должно стать активным, так как это ShowDialog был
C#
1
2
3
4
private void Form1_Activated(object sender, System.EventArgs e)
        {
            this.Visible = true;
        }
но она не показывается
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
09.06.2012, 08:39
Не понятно почему вы решили, что
Цитата Сообщение от mikh Посмотреть сообщение
при закрытии формы2 окно формы1 должно стать активным,
Поставьте Visible = true; после ShowDialog
C#
1
2
3
4
this.Visible = false;
Form7 f2 = new Form2();
f2.ShowDialog();
this.Visible = true;
0
6 / 6 / 3
Регистрация: 20.04.2012
Сообщений: 303
11.06.2012, 09:33  [ТС]
как я понял со слов Vermilion, если постоянно при переходах писать Form2 f2 = new Form2(); и Form1 f1 = new Form1();, то создасться куча новых экземпляров форм 2 и 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2012, 09:33
Помогаю со студенческими работами здесь

Переход от одной формы к другой
У меня есть текстбокс и кнопка, так вот мне надо допустим ввел цифру 6 и прога сразу показала мне 6-ю форму, или если ввожу форму 15 то...

Переход от одной формы к другой
Здравствуйте. Проблема стандартна - перейти из одной формы form1 во вторую form2 При этом, не имеет значения, закрывать первую, или...

Переход от одной формы к другой
Как сделать переход от одной формы к другой C#? Переход как бы есть! он очень медленный ,можно ли ускорить этот процесс?

Плавный переход от одной формы к другой
Можно ли как то сделать плавный переход от одной формы к другой? А то быстрый переход прямо режет глаза. Надеюсь на вашу помощь. Код...

Переход из одной формы к другой форме и обратно
Здравствуйте Форумчани. Вопрос в следующем. Я создал три формы. Первая форма заглавная. Делаю переход от формы1 к форме2 и обратно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru