Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
Асталиса
6 / 6 / 0
Регистрация: 03.01.2016
Сообщений: 157
#1

Дублирующая форма - C#/.NET 4.x

18.02.2016, 05:56. Просмотров 247. Ответов 12
Метки нет (Все метки)

Доброе утро всем.

Подскажите пожалуйста, как предотвратить запуск второй копии формы которая уже запущена в трее?

Есть две формы, одна вызывает вторую и сворачивается.
После закрытия второй, запускается копия первой. Получается две первых, одна свернута вторая развернута



Вызов второй с первой:

C#
1
2
3
this.Hide();
                    ArielClock f = new ArielClock();
                    f.Show();

Вызов первой со второй:

C#
1
2
3
this.Hide();
            Form1 f = new Form1();
            f.Show();

Идиотство я понимаю, но чего то не получается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2016, 05:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос .NET 4.x Дублирующая форма (C#):

Форма 1 вызывает форму 2, форма 2 закрывается, форма 1 продолжает работать дальше - C#
Вынес предстартовые действия формы1 в форму2 (там у меня проверка существования файлов, их закачка если нету и проверка обновления), но как...

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

Во общем ситуация такая. Есть форма на форме кнопка. Кнопка запускает метод. После запуска метода форма умирае - C#
Во общем ситуация такая. Есть форма на форме кнопка. Кнопка запускает метод. После запуска метода форма умирает. Как решить? В голове...

Форма на C# - C#
Help, Help На С# нужно создать форму которая при запуске будет открываться на весь экран любого монитора и чтобы панель задач, строка...

Форма - C#
Подскажите как сделать такую форму?

форма - C#
Такой вопросик, есть форма на c# размером 50х100 на которой распологается две кнопки Нужно чтобы при запуске форма автоматически(по...

12
Даценд
Модератор
Эксперт .NET
4035 / 3874 / 1952
Регистрация: 20.04.2015
Сообщений: 7,038
18.02.2016, 10:51 #2
Как один из вариантов.
Вызов второй с первой:
C#
1
2
3
4
this.Hide();
Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();
Вызов первой со второй:
C#
1
2
this.Hide();
(this.Owner as Form1).Show();
1
BroDMax
150 / 150 / 72
Регистрация: 01.10.2015
Сообщений: 310
18.02.2016, 10:56 #3
Асталиса, ну все верно, вы этой строчкой создаете новую, а не вызываете старую: Form1 f = new Form1(); Поэтому, чтобы вызвать уже созданную, нужно где-то сохранить ссылку на нее (другими словами, чтобы вторая форма знала о существовании первой). Одно из решений данной ситуации является написание конструктора для формы ArielClock, например так:
C#
1
2
3
4
5
6
7
8
9
10
public partial class ArielClock : Form
{
    public ArielClock(Form Parent)
    {
        _myparent = Parent;
    }
 
    private Form _myparent;
 
    ...
Вызов второй с первой теперь выглядит так:
C#
1
2
3
this.Hide();
ArielClock f = new ArielClock(this);
f.Show();
Вызов первой со второй:
C#
1
2
this.Hide();
_myparent.Show();
1
Асталиса
6 / 6 / 0
Регистрация: 03.01.2016
Сообщений: 157
18.02.2016, 14:12  [ТС] #4
Работают оба варианта. Остановился на первом варианте пока. Теперь открывается текущая вместо дублирующей.

Ещё вопросик. Как после выхода со второй формы, прекратить её жизнедеятельность? Там есть звуковой сигнал который говорит о том что она живет
0
BroDMax
150 / 150 / 72
Регистрация: 01.10.2015
Сообщений: 310
18.02.2016, 14:14 #5
Асталиса, вместо this.Hide(); напишите this.Close(); в коде вызова первой со второй.
0
Асталиса
6 / 6 / 0
Регистрация: 03.01.2016
Сообщений: 157
18.02.2016, 14:50  [ТС] #6
Нед. Я так уже делал в первую очередь. Тогда не найдет form3 и вывалится еррор
0
Миниатюры
Дублирующая форма  
BroDMax
150 / 150 / 72
Регистрация: 01.10.2015
Сообщений: 310
18.02.2016, 14:52 #7
Асталиса, так Вы строчки поменяйте местами! Это же логично Сначала показываем, потом закрываем.
0
Асталиса
6 / 6 / 0
Регистрация: 03.01.2016
Сообщений: 157
18.02.2016, 14:58  [ТС] #8
Не, это было бы слишком просто
Ошибка конечно исчезает но форма продолжает жить
0
BroDMax
150 / 150 / 72
Регистрация: 01.10.2015
Сообщений: 310
18.02.2016, 15:06 #9
Цитата Сообщение от Асталиса Посмотреть сообщение
Не, это было бы слишком просто
Вы, вероятно, смеетесь?
Цитата Сообщение от Асталиса Посмотреть сообщение
форма продолжает жить
Мне очень интересно, как Вы это определили. Я уже сказал, поменяйте строки местами, на скриншоте Вы этого не сделали. На MSDN даже написано, цитирую:
Цитата Сообщение от MSDN
После закрытия формы все ресурсы, созданные внутри объекта, закрываются, а форма удаляется.Закрытие формы во время выполнения можно предотвратить путем обработки Closing событий и параметр Cancel свойство CancelEventArgs передается как параметр для обработчика событий.Приложение закрывается при закрытии формы форму запуска приложения.

Два условия, когда формы не удаляется на Close при (1) это часть приложения многодокументного интерфейса (MDI) и форма не отображается, и (2) отображаемый формы использует ShowDialog.В этих случаях необходимо вызвать Dispose вручную, чтобы пометить все элементы управления формы для сборки мусора.
0
Асталиса
6 / 6 / 0
Регистрация: 03.01.2016
Сообщений: 157
18.02.2016, 15:08  [ТС] #10
Я не смеюсь. На второй форме играет музыка которая в нее встроена. Откуда она играет если форма закрыта? Никаких завязок с этим файлом в других формах нет.

На первом скриншете не сделал, а второй я отправил по ошибке и удалил но Вы видимо успели его посмотреть.
0
BroDMax
150 / 150 / 72
Регистрация: 01.10.2015
Сообщений: 310
18.02.2016, 15:18 #11
Цитата Сообщение от Асталиса Посмотреть сообщение
Откуда она играет если форма закрыта?
Смотря через что Вы музыку воспроизводите! Если это сторонние библиотеки, то конечно играть будет. Вам необходимо создать обработчик для события формы FormClosing или FormClosed и остановить музыку там, вручную.

Добавлено через 2 минуты
...либо там же в коде, только перед закрытием, если это возможно.
1
Асталиса
6 / 6 / 0
Регистрация: 03.01.2016
Сообщений: 157
18.02.2016, 15:25  [ТС] #12
Да, возможно. Сторонние файлы.

(определение)
sound.Stop();
(this.Owner as Form3).Show();
this.Close();


СпасибоBroDMax, вопрос FormClosing
1
BroDMax
18.02.2016, 15:29     .NET 4.x Дублирующая форма
  #13

Не по теме:

FormClosing

0
18.02.2016, 15:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2016, 15:29
Привет! Вот еще темы с ответами:

Форма - C#
Как сделать чтобы когда растягиваешь форму текстбокс тянулся за ней, и все остальные элементы были не на месте, я растягивались вместе с...

Форма - C#
При нажатии кнопки в форме Form1 создается и открывается форма Form2, добавляю в Form2 кнопку и лэйбэл, Что нужно прописать в коде формы...

1-ая и 2-ая форма - C#
Вот такое дело, создаю я переменную формы, и следущим действием является ее прятанье... а ОНО НЕ ПРЯЧЕТСЯ :( То есть должна открытся 2-ая...

Форма входа - C#
Как создать форму входа, что бы пользователи создавали свой аккаунт а потом заходили под него, и когда заходили выводилось где то на форме...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru