Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Расскажите про Application.Run(...)  (Прочитано 19841 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
little
Помогающий

de
Offline Offline
Пол: Мужской

« : 14-12-2007 08:21 » 

Кто-нибудь может рассказать как реализован метод Application.Run(new Form()); ?

Форма запущенная через Run при минимайзе или хайде не вываливается, в отличие от запуска через ShowDialog(). Как можно нечто подобное реализовать самому?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 14-12-2007 09:16 » 

Application - экземпляр класса приложения (назовём A)
. - оператор доступа к члену класа
Run - здесь - метод класса A  , запускает приложение. Метод принимает указатель на экземпляр класса Form

new Form() - создание экземпляра класса Form в куче , оператор new после создания возвращает указатель на начало экземпляра в памяти

ShowDialog() - это, наверное, никак не относится к запуску приложения, а показывает какой то диалог Улыбаюсь

(теперь ждём исправлений от НЕТ'чикофф Отлично )
------------
Цитата
Как можно нечто подобное реализовать самому?
в НЕТе - наверное вот так:
Код:
Application.Run()
« Последнее редактирование: 13-01-2009 14:24 от Алексей1153++ » Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 14-12-2007 10:38 » 

Цитата: little
Форма запущенная через Run при минимайзе или хайде не вываливается
Кто куда вываливается? Форма на экран? Так она минимизирована или скрыта - логично, что на экране её нет. Приложение далее Run не проходит? Тоже правильно - изнутри формы должен поступить сигнал о её закрытии, тогда только Run завершится.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #3 : 17-12-2007 08:32 » 

Эмм... судя по ответам, вы либо решили поприкалываться, либо я что-то не так написал Улыбаюсь

Речь идет про C#.
При создании Win-приложения 2005-я студия создает по умолчанию класс (Class1) со статическим методом Main() и класс-форму (Form1). В метод Main() помещается вызов следующей конструкции
Код:
Application.Run(new Form1());

Что при запуске приложения приводит к отображению формы на экране.

Также, вместо этого я мого отобразить форму посредством
Код:
Form1 frm = new Form1();
frm.ShowDialog();
Но в этом случае, стоит только мне минимизировать окно формы, или скрыть его, как происходит выход из ShowDialog() и приложение завершается.

Вот я и интересуюсь, что такого реализовано в методе Application.Run(), что позволяет приложению не идти дальше этой строки в Main() до тех пор пока форма не будет закрыта.

Или же по другому - чем заменить frm.ShowDialog(), чтобы работало как Application.Run(frm) ?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 17-12-2007 12:10 » 

Ни при минимизации (сворачивания), ни при изначальной минимизированности окна никакого выхода из ShowDialog не происходит. При Hide происходит.

ShowDialog открывает окно в "модальном" режиме, когда нельзя переключиться на другие окна этого же приложения, не закрыв исходное. Hide окно закрывает.

Метод Application.Run вызывает метод окна Show.

Ответ на вопрос "что такое реализовано в Application.Run" имеется в MSDN:
Цитата
Application.Run()

Begins running a standard application message loop on the current thread, without a form.

The message loop runs until Exit or ExitThread is called.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #5 : 18-12-2007 07:50 » 

Да, с минимизацией это я поднапутал  Скромно так...

Но вопрос-то остается - как мне реализовать Application.Run(frm) другим способом?
Какую конструкцию накатать, чтобы отобразить форму и не бежать по коду до тех пор, пока не форма не будет закрыта?

Да еще, что понимается под Standard message loop?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 18-12-2007 10:05 » new

Цитата: little
Да еще, что понимается под Standard message loop?
Стандартный цикл приёма и обработки сообщений, который имеется в любом приложении, работающем в интерактивном (не пакетном) режиме во многих операционных системах. Альтернативным способом является построение событийно-ориентированных приложений, состоящих из обработчиков сигналов от ОС и других приложений. Нечто аналогично наблюдается внутри формы, но это лишь из-за скрытого от программиста цикла приёма и обработки сообщений.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
sss
Специалист

ru
Offline Offline

« Ответ #7 : 19-12-2007 03:40 » 

little, стандартный цикл выборки сообщений.
Код:

 while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
    {
        if (bRet == -1)
        {
            // handle the error and possibly exit
        }
        else
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

« Последнее редактирование: 13-01-2009 14:25 от Алексей1153++ » Записан

while (8==8)
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #8 : 09-04-2008 12:48 » 

Но вопрос-то остается - как мне реализовать Application.Run(frm) другим способом?
Нафига только никак не пойму. Что не устраивает то ?
Кто-нибудь может рассказать как реализован метод Application.Run(new Form()); ?
Как реализован ? Берём Reflector и смотрим.

Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines