Страница: 1 | 2 |
|
Вопрос: sub Main() - не понимаю...
|
Добавлено: 17.09.08 19:29
|
|
Номер ответа: 16 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
|
Профиль | | #16
|
Добавлено: 02.10.08 17:31
|
Привет Всем!!!
Все ответы интересные. Чего спорите-то?
Steel Brand - однозначно Всё объяснил (это для продвинутых).
А я то только пытаюсь понять что к чему.
Зато вопросы читаете не внимательно...
Ну не получалось у меня. Не беда. Не боги горшки обжигали.....
спрашиваю Как запустить проект из Sub Main()?
Steel Brand отвечает Зачем эта морока с Sub Main?
сам нахожу ответ
Решение найти удалось... Теперь весь код выглядит так:
Module Module1
Public f As Form1
Sub main()
f = New Form1
Application.Run(f)
End Sub
End Module
Обратите внимание - никакого f.show() !!!
Steel Brand возмущается моей тупости Ну тебе же показали как Application.Run работает, что не ясно?
Это в смысле: 4) Application.Run запускает цикл обрабокти сообщений, если не делать свой Sub Main то все равно эта функция будет вызываться неявно. ?
да... это правда... Но вот в чём штука: как только программист написал процедуру Main() - с этого момента он должен ЯВНО НАПИСАТЬ APPLICATION.RUN(стартовая форма).
в случае с одной формой это выглядит просто (и действительно Steel Brand прав - Зачем эта морока с Sub Main? . Объяснюсь ещё раз - исключительно с учебной целью.):
-
- Module Module1
- Sub Main()
- Dim f1 as New Form1
- Application.run(f1)
- End Sub
- End Module
Второй пример: основная форма и форма заставка (тоже - исключительно с учебной целью)
-
- Module ModuleMain
- Sub main()
- Dim f1 As New Form1
- Dim s As New SplashScreen1
- s.Timer1.interval = 1000
- s.Timer1.Start()
- s.ShowDialog()
- Application.Run(f1)
- End Sub
- End Module
- определяем условие скрытия формы заставки:
- [source]
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- Static mNext As Long
- mNext += 1
- If mNext = 3 Then mNext = Nothing : Timer1.Stop() : Me.Hide()
- End Sub
Ну вроде разобрался.
Да и Steel Brand пишет: Перечитай еще раз тему, тебе на все вопросы ответили
Ну не на все, допустим...
Извините срочно убегаю....
Ответить
|
Номер ответа: 18 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
|
Профиль | | #18
|
Добавлено: 03.10.08 02:08
|
Если Вас удовлетворяет то, что создается автоматически при создании проекта - никаких возражений не имею.
Лично для себя я понял, что управлять процессом загрузки приложения можно только через Sub Main().
Можно определить - запущено Ваше приложение или нет ещё задолго до загрузки всех форм и инициализации переменных.
Можно произвольно изменить время отображения заставки на экране.
Пользователям легче перенести одну длительную загрузку в начале, чем многократные загрузки форм в ходе работы с приложением.
Если это не так - покажите на примере.
Ответить
|
Номер ответа: 19 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
|
Профиль | | #19
|
Добавлено: 03.10.08 02:11
|
Может немного не точно выразился...
Не только через Sub Main(). , а удобнее через Sub Main().
Ответить
|
Номер ответа: 20 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
|
Профиль | | #20
|
Добавлено: 03.10.08 02:12
|
Кстати, где бы на эту автоматически сгенерированную Sub Main() взглянуть?
Ответить
|
Номер ответа: 22 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
|
Профиль | | #22
|
Добавлено: 03.10.08 14:02
|
Спасибо EROS за подробный ответ!
Мне это очень интересно.
Ответить
|
Номер ответа: 23 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
|
Профиль | | #23
|
Добавлено: 03.10.08 14:10
|
Ещё раз спасибо....
EROS - посмотрите пожалуйста мой вопрос:
форма отображается, но не получает фокус...
Пробовал переписать через Main() - всё получилось, фокус на поле ввода.
Это я что-то настраиваю при компиляции не так?
Ответить
|
Номер ответа: 24 Автор ответа: Artyom
Разработчик
Вопросов: 130 Ответов: 6602
|
Профиль | | #24
|
Добавлено: 04.10.08 00:45
|
да... это правда... Но вот в чём штука: как только программист написал процедуру Main() - с этого момента он должен ЯВНО НАПИСАТЬ APPLICATION.RUN(стартовая форма).
Совершенно верно. Потом что до того как программист написал процедуру Main, эта процедура была за него создана системой и в ней была аналогичная строчка кода.
Steel Brand возмущается моей тупости
Ну я пролистал страницу одним вращением скорла, не следил кто кому отвечал, просто увидел что рабочий код был приведен, кем он был приведен я не разбирался.
Лично для себя я понял, что управлять процессом загрузки приложения можно только через Sub Main().
Я тебе скажу - совсем не только через Sub Main (ниже я покажу как).
Можно определить - запущено Ваше приложение или нет ещё задолго до загрузки всех форм и инициализации переменных.
Это можно определить на любом этапе, в т.ч. до того как загрузится основная форма
Кстати, где бы на эту автоматически сгенерированную Sub Main() взглянуть?
Если работаешь с C#, открой автоматически сгенерированный файл Program.cs и увидишь.
Под VB .NET, как сказал EROS, его так просто не увидишь потому что там немного другая модель (я бы сказал, VB .NET дает Windows-программисту гораздо больше помощи чем C#, что, в принципе, сложилось исторически, что бы не говорили сторонники C# в его защиту
Но если воспользоваться прогарммой Reflector то эту процедуру легко найти:
- <EditorBrowsable(EditorBrowsableState.Advanced), STAThread, DebuggerHidden> _
- Friend Shared Sub Main(ByVal Args As String())
- Try
- Application.SetCompatibleTextRenderingDefault(WindowsFormsApplicationBase.UseCompatibleTextRendering)
- End Try
- MyProject.Application.Run(Args)
- End Sub
То что привел EROS - это инициализация WindowsFormsApplicationBase, это не совсе то.
Теперь что касается того что ты собственно хочешь сделать.
1) Создаешь Splash-форму, на ней вообще может не быть ни строчки кода.
2) Создаешь основную форму приложения, там уже пиши сколько хочешь кода
3) Заходишь в свойства проекта, вкладка Application
4) Устанавливаешь опции Startup Form и Splash Screen
5) Жмешь View Application Events. При этом будет создан файл ApplicationEvents.vb
6) Создаешь в этом файле обработчик нужных тебе событий, их там не много.
Например что-то типа такого, я вставил задержку чтоб симитировать какой-то длительный процес загрузки
- Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
- System.Threading.Thread.Sleep(10000)
- End Sub
Жмешь F5 и прозреваешь
Это так сказать типа круиз-контроля, можно все это лепить в Sub Main но чтоб это делать, нужно четко понимать что делаешь и как это будет работать.
Ответить
|
Номер ответа: 25 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
|
Профиль | | #25
|
Добавлено: 04.10.08 02:53
|
Спасибо, Steel Brand!!!
Чтобы понять - нужно переварить информацию...
Сейчас этим и займусь.
Ответить
|
Страница: 1 | 2 |
Поиск по форуму