Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
 Аватар для _Vladimir_
57 / 55 / 10
Регистрация: 27.07.2010
Сообщений: 279

Предотвратить повторное создание формы

22.07.2011, 14:44. Показов 4788. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день,
есть родительская форма с MenuStrip, с помощью этого меню создаются дочерние формы так:
C#
1
2
3
4
NotWorkButton corOutForm = new NotWorkButton();
corOutForm.MdiParent = this;
corOutForm.WindowState = FormWindowState.Maximized;
corOutForm.Show();
но эту форму надо создавать только в том случае, если она не создана.

Т.е. надо проверить существование экземпляра формы.

Есть еще один вариант - это блокировать на панели меню кнопку, которой создается форма, но возникает следующий (для меня не понятный) вопрос, как из дочерней формы доступиться к элементу меню на родительской форме.

Пока реализация этих вариантов для меня загадка.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.07.2011, 14:44
Ответы с готовыми решениями:

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

Повторное открытие формы
Здравствуйте, private void показатьАлфавитToolStripMenuItem_Click(object sender, EventArgs e) { Alfavit f =...

Как предотвратить создание большого количества форм?
Доброго времени суток. Планирую писать приложение, содержащее список рецептов по разделам (первое, второе и пр.). Планируется размещение 1...

7
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
22.07.2011, 15:01
использовать WinApi функцию FindWindow если IntPtr==0 то формы нет. FindWindow, здесь посмотрите как работать.
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
22.07.2011, 15:07
если не хотим использовать WinAPI:

добавляем в нужную форму статическое поле
C#
1
internal static bool isCreated = false;
далее в конструкторе формы пишем код:
C#
1
2
3
4
5
6
public Form(){
   if(Form.isCreated == true){
      return; //кажется так, либо по-другому выходить из метода
   }
   InitializeComponents();
}
в закрытии формы:
C#
1
2
3
private Form_Closed(object sender, ...){
   Form.isCreated = false;
}
думаю сама задумка ясна
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.07.2011, 15:26
где-нибудь "на видном месте":
Code
1
NotWorkButton _corOutForm;
где нужно:
C#
1
2
3
4
if (_corOutForm == null){
   _corOutForm = new NotWorkButton();
}
...
1
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
22.07.2011, 15:35
к своему посту ещё добавлю:
вы создаете эту формочку путем нажимания на какую-либо кнопочку по идее
вот в конструкторе формы можете эту кнопку задисейблить:
C#
1
createNewFormButtonName.Enabled = false;
и когда закрываете форму (событие FormClosed):
C#
1
createNewFormButtonName.Enabled = true;
0
 Аватар для _Vladimir_
57 / 55 / 10
Регистрация: 27.07.2010
Сообщений: 279
22.07.2011, 15:54  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
где-нибудь "на видном месте":
Code
1
NotWorkButton _corOutForm;
где нужно:
C#
1
2
3
4
if (_corOutForm == null){
   _corOutForm = new NotWorkButton();
}
...
этот вариант показался самым простым, форма открывается только один раз и все, т.е. повторный запуск после того как форму закроют, не осуществляется. Может надо както вручную удалить объект, т.к. сборщик мусора не известно когда до него доберется?
0
 Аватар для _Vladimir_
57 / 55 / 10
Регистрация: 27.07.2010
Сообщений: 279
27.07.2011, 15:02  [ТС]
Решил задачу следующим образом:

1)на родительской форме с главным меню объявил ссылку на форму, статическую переменную (статус), и открытое свойство для переменной
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
...
SubForm _subForm;
static bool is_subForm = false; 
 
public static bool Is_subForm
{
    set
    {
        is_subForm = value;   
    }
}
 
...
private void SubMenuItem_subForm_Click(object sender, EventArgs e)
{
    if (!is_subForm)
    {
        _subForm = new SubForm();
        _subForm.MdiParent = this;
        _subForm.WindowState = FormWindowState.Maximized;
        _subForm.Show();
        is_subForm = true;
    }
    else
    {
        _subForm.WindowState = FormWindowState.Maximized;    
    }
}
2)ну и в дочерней форме
C#
1
2
3
4
private void NotWorkButton_FormClosing(object sender, FormClosingEventArgs e)
{
    MainForm.Is_subForm = false;
}
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.07.2011, 22:46
Цитата Сообщение от _Vladimir_ Посмотреть сообщение
этот вариант показался самым простым, форма открывается только один раз и все, т.е. повторный запуск после того как форму закроют, не осуществляется. Может надо както вручную удалить объект, т.к. сборщик мусора не известно когда до него доберется?
почему это тебя беспокоит?
я не вполне вник в твою проблему, но уж проблемы коллектора тебя точно не должны сильно волновать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.07.2011, 22:46
Помогаю со студенческими работами здесь

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

Запретить повторное открытие формы
Необходимо чтобы при открытии программы: 1. если программа уже запущена -> показываем 2. если нет, запускаем. Подскажите пожалуйста, как...

Повторное открытие формы выдает ошибку доступа к ликвидированному объекту
Добрый вечер всем! Раньше я работал в C++ Builder и использовал метод Close() для своих форм. Затем их можно было всегда опять показать...

Повторное открытие формы: форму, уже отображенную, нельзя отобразить как модальное диалоговое окно
Приветствую вас уважаемые ! Вот помогите пожалуйста решить! При повторном открытии формы выдает: Форму, уже отображенную,...

Повторное создание формы
Вновь всем привет) Возникла след. проблема: Пишу игру и при ее завершении у меня открывается новая форма, где я хочу сделать кнопку...


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

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