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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Завершение работы приложения до инициализации 
:(
    Опции темы
Sergey_P
Дата 17.9.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеется процедура, которая начинает выполняться при запуске приложения (расположена в главной форме)

Код

public Form1()
        {
            Application.EnableVisualStyles();
            On_Load();             //моя процедура
            InitializeComponent(); //переходит сюда после Application.Exit();
            
        }


В моей процедуре On_Load();, при выполнении определенного условия появляется Message с кнопкой OK и происходит выход из приложения Application.Exit();

Однако даже после выполнения Application.Exit(); курсор переходит на InitializeComponent();, а затем на

Код

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1()); //выполняет эту строчку
        }



После чего как ни в чем не бывало окно программы запускается!  smile 

Как от такого избавиться? 
Как сделать так, чтобы при запуске программы и выполнения определенног условия (нет рабочего каталога), основное окно программы больше не появлялось.
PM MAIL   Вверх
mihryak
Дата 17.9.2007, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вставь проверку перед этим методом
Код

Application.Run(new Form1());

а его вызывай в том случае, если проверка прошла успешно
PM MAIL ICQ   Вверх
yar
Дата 17.9.2007, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Во время конструирования формы Application ещё не запущено и (наверняка) не вошло в цикл сообщений. Поэтому ничего и не происходит smile.
Так что можно где-то определить MyFormInitException и сделать так:

Код

static void Main()
{
            Form f;
            try
            {
                f = new Form1();
            }
            catch (MyFormInitException)
            {
                return;
            }
            Application.Run(f);
}


А из конструктора формы кидать это исключение.

Добавлено через 8 минут и 17 секунд
Хотя, если это проверка каких-то предусловий, не связанных с формой, то все проверки лучше делать вообще до инстанцирования формы.
--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг
PM MAIL WWW   Вверх
Sergey_P
Дата 17.9.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



извниняюсь за возможно глупый вопрос, но я изучаю VS и C# пока только 2 недели, а как кинуть исключение из формы?  smile 
PM MAIL   Вверх
mihryak
Дата 17.9.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sergey_P @  17.9.2007,  23:00 Найти цитируемый пост)
а как кинуть исключение из формы?

Код

public class MyStrangeException : Exception
{
}

и в любом месте без try-catch  smile 
Код

throw new MyStrangeException();

только зачем такую штуку делать - непонятно smile
чем вариант с дополнительным кодом в program.cs не угодил?
приложение прекрасно работает и безо всяких форм..
PM MAIL ICQ   Вверх
Sergey_P
Дата 18.9.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нуууу ...код не красивый  smile 
PM MAIL   Вверх
mihryak
Дата 18.9.2007, 01:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



угу, потрясающая красота - кидать исключения в конструкторе формы  smile 
как, впрочем, и обучать её (форму) тому, что требуется для работы приложению (а не его визуальной части в виде формы!)  smile 
слабо себе представляю, что за такие трюки работник сумеет избежать как минимум серьёзного разговора
а такие более чем обыденные штуки, как обработка параметров командной строки, запрет на повторный запуск (опять-таки - приложения) и т.п. тоже планируешь в конструкторе главной формы делать?

да и не вижу я ни малейшего уродства в коде вроде
Код

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (Directory.Exists(ExpectedDirectoryName)
            {
                        Application.Run(new Form1()); //выполняет эту строчку
            }
            else
            {
                        MessageBox.Show("Сам себе злобный буратино! :-Р");
            }
        }

PM MAIL ICQ   Вверх
yar
Дата 18.9.2007, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Согласен с mihryak, 
код не относящийся к форме должен быть от неё отделён.
Если проверок много, можно выделить их в отдельный метод и вызывать его из Main.
--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг
PM MAIL WWW   Вверх
Sergey_P
Дата 18.9.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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