Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дочерние формы в MDI-приложении 
:(
    Опции темы
VladCSharp
Дата 27.10.2005, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.10.2005

Репутация: нет
Всего: нет



как проконтролировать и недопустить повторного запуска такого же окна, а еще лучше активизировать его?
PM MAIL   Вверх
mr.DUDA
Дата 27.10.2005, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Завести в родительской форме переменную с типом ChildForm. При добавлении дочерней MDI-формы, проверять переменную, и если не null - то не создавать новую форму, а активировать существующую. При закрытии дочерней MDI-формы сбрасывать переменную в null.


--------------------
user posted image
PM MAIL WWW   Вверх
nikf
Дата 27.10.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

Репутация: нет
Всего: 1



Непонятно тогда зачем создавать MDI проект если там будет всего одна форма - есть проект SDI
Цитата(mr @ 27.10.2005, 09:06)
Завести в родительской форме переменную с типом ChildForm.
- всегда была и не одна, и наз-ся : MdiChildren[int]. Нужно тока привести ее кнужному типу

Это сообщение отредактировал(а) nikf - 27.10.2005, 09:46
PM MAIL   Вверх
arilou
Дата 27.10.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: нет
Всего: 61



VladCSharp

Если ты имел ввиду "как проконтролировать и недопустить повторного запуска child-формы, если одна такая форма уже открыта", то:

Добавь такой метод в класс MDI формы.

Код

bool childFormPresent(Type childFormType)
{
   foreach(Form frm in this.MdiChildren)
     if(childFormType == frm.GetType())
        return true;

  return false;
}


юзаешь так

Код

if(!childFormPresent(typeof(MyChildFormClass))
  // вставляешь новое окно типа MyChildFormClass в parent форму





--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
VladCSharp
Дата 28.10.2005, 04:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.10.2005

Репутация: нет
Всего: нет



всем большое спасибо, все получилось, все работает
PM MAIL   Вверх
mal
Дата 30.5.2007, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Можно по подробней как можно проконтролировать и не допустить повторного запуска child-формы smile 
PM   Вверх
arilou
Дата 30.5.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: нет
Всего: 61



Цитата(mal @  30.5.2007,  08:15 Найти цитируемый пост)
Можно по подробней как можно проконтролировать и не допустить повторного запуска child-формы

Пример парой постов выше.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mal
Дата 31.5.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Приведенный код только проверяет открыта ли child-форма. Я бы хотел создать процедуру, в которую передаем тип формы, а она уже либо открывает новую, либо активирует открытую. smile 
PM   Вверх
SpaceSpace
Дата 31.5.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: 1
Всего: 10



Код

// это твоя будущая child форма
 Form2 frm2 = new Form2();

        public Form1()
        {
           
            InitializeComponent();
            // это ты говоришь кто её парэнт
            frm2.MdiParent = this;
            frm2.Show();
            
        }
       // малость измененная функция, показанная выше
       void childFormPresent(Type childFormType)
        {
            // инициализирована ли форма?
            bool flag = false;
            foreach (Form frm in this.MdiChildren)
                if (childFormType == frm.GetType())
                { 
                    // на всякий случай указываем родителя
                    frm2.MdiParent = this;
                    // открываем
                    frm.Show();
                    flag = true;
                }
            // если форма не инициализирована
            if (!flag)
            {
                // создаем заново форму
                frm2 = new Form2();
                // прописываем родителя
                frm2.MdiParent = this;
                // отображаем
                frm2.Show();
            }

        }

        // у тебя кнопочка должна быть, соотыетственно
        private void button1_Click(object sender, EventArgs e)
        {
            // при щелчке по кнопке, вызываем волшебную функцию
            childFormPresent(typeof(Form2));
        }


Это сообщение отредактировал(а) SpaceSpace - 31.5.2007, 10:45


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
mal
Дата 31.5.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Спасибо за помощь. 
На сколько я понял из кода, не получилось создать универсальную процедуру для вызова новой child-формы или активации открытой. В моём проекте предполагается у основной формы порядка 20 дочерних. smile 
PM   Вверх
arilou
Дата 31.5.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: нет
Всего: 61



mal, помоему решение как раз универсальное.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mal
Дата 31.5.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



arilou, Ваше решение - универсальное, но оно может только определить открыта ли child-форма. А я бы хотел открыть или активировать child-форму.

Не универсальное - это я на счет решения SpaceSpace

Или я чего-то не до понимаю? smile 
PM   Вверх
stab
Дата 31.5.2007, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 1
Всего: 48



Цитата(mal @  31.5.2007,  18:30 Найти цитируемый пост)
Не универсальное - это я на счет решения SpaceSpace


в чём же проявляется его не универсальность? как по мне, так там единственное чего не хватает так это вызова Form.Activate, в случае того, если форма уже существует, и то, может быть, вполне и без него можно обойтись.



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
mal
Дата 31.5.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Цитата

Код

 Form2 frm2 = new Form2();


Что за Form2? Как быть если у меня 20 child-форм?
PM   Вверх
Exception
Дата 31.5.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 5
Всего: 186



Список дочерних форм (только что написал).

Это сообщение отредактировал(а) Exception - 31.5.2007, 18:33
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.