Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: sub Main() - не понимаю... Добавлено: 17.09.08 19:29  

Автор вопроса:  DimDoc
Создаю новый проект. Одна форма. F5 - форма перед нами...
пробую тоже самое сделать через модуль: добавляю модуль:
[source]
Module Module1
    Public f As Form1
    Sub main()
        f = New Form1
        f.Show()
    End Sub
End Module
[\source]
В проекте настраиваю стартовать с Sub Main(). Жму F5 - форма появляется, но мгновенно исчезает.
Что делаю не так?

Ответить

  Ответы Всего ответов: 26  

Номер ответа: 1
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 17.09.08 19:50
все нормально работает

Ответить

Номер ответа: 2
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #2 Добавлено: 17.09.08 20:06
Как же нормально, если форма не отображается?

Ответить

Номер ответа: 3
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 17.09.08 20:07
Проверь, что у тебя в Form_Load

Ответить

Номер ответа: 4
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #4 Добавлено: 17.09.08 20:32
да пока ничего.... проект абсолютно пустой...
просто пытаюсь понять - что к чему (свойства форм, создание, события, загрузка и т.д.)

Ответить

Номер ответа: 5
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #5 Добавлено: 17.09.08 21:07
форма отображается и сразу выгружается, как если бы в процедуре стоял оператор END.

Ответить

Номер ответа: 6
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #6
Добавлено: 17.09.08 23:11
Не знаю как там в дотнете... может ее модально надо показать? f.showdialog ? Может, форма грузится, потом происходит End Sub в Sub Main и выходит. Не знаю, как это дело в дотнете устроено...

Ответить

Номер ответа: 7
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #7 Добавлено: 17.09.08 23:37
извините, не знаю что такое
дотнете...
.
я изучаю Visual Basic 2008 .net
Вопрос, вроде бы должен быть простым для программистов .NET
Как запустить проект из Sub Main()?

Ответить

Номер ответа: 8
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #8
Добавлено: 18.09.08 09:39
в 2005 все прекрасно работает) видимо это какая то тонкость 2008

Ответить

Номер ответа: 9
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #9 Добавлено: 18.09.08 10:46
Решение найти удалось... Теперь весь код выглядит так:
  1. Module Module1
  2.     Public f As Form1
  3.     Sub main()
  4.         f = New Form1
  5.         Application.Run(f)
  6.     End Sub
  7. End Module

Обратите внимание - никакого f.show() !!!

Что Вы думаете об этом?

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 19.09.08 13:36
здесь нечего думать.

1) Какой тип приложения?
2) Почему просто не указана стартовая форма? Зачем эта морока с Sub Main?
3) После завершения работы основного потока (в данном случае в нем работает Sub Main) работа приложения завершается, остальные вопросы думаю должны отпасть сами собой.
4) Application.Run запускает цикл обрабокти сообщений, если не делать свой Sub Main то все равно эта функция будет вызываться неявно.

Ответить

Номер ответа: 11
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #11 Добавлено: 29.09.08 00:49
даже не знаю... думать или нет...

1) Какой тип приложения?

WindowsApplication1

2) Почему просто не указана стартовая форма? Зачем эта морока с Sub Main?

Ну.... не знаю, пока.... зачем морока...
MSDN пока что описывает sub main() - как главную процедуру проекта, с которой должен начинаться любой проект!!! В процессе загрузки приложения из нескольких форм, например можно визуализировать SplashScreen, а в конце процедуры указать - какую форму вывести первой.

3) После завершения работы основного потока (в данном случае в нем работает Sub Main) работа приложения завершается, остальные вопросы думаю должны отпасть сами собой.

...вопросы не отпадают, а наоборот....
почему form.show() не оставляет форму видимой?
это же не процедура form load...

Например в VB6 я делал примерно так:

Sub Main()

If App.PrevInstance = True Then
MsgBox "Программа уже запущена!", vbInformation"
Else

    frmSplash.Show
    frmSplash.Refresh
    
    
      ' необходимые дополнительные операции
    Set fMainForm = New Frm1
    Set myFrm2 = New Frm2
    Set myFrm3 = New Frm3
    Set myFrm4 = New Frm4
    Set myFrm5 = New Frm5
   ' и т.д.
    
    Load fMainForm
    Load myFrm1
    Load myFrm2
    Load myFrm3
    Load myFrm4
    Load myFrm5
  
    Unload frmSplash
  
     fMainForm.Show
    fMainForm.Refresh
End If
End Sub

и Всё РАБОТАЛО!!!
но пришло время изучать Visual Basic .NET
и даже простые проекты не работают...
Например есть 1 форма и заставка, которая стартует. Форма на экране отображается, но фокус теряет. Надо по ней кликнуть, чтобы начать ввод в текстовое поле...

Подскажите, пожалуйста - где ошибка? Что не так?

Skywalker пишет, что в 2005 все прекрасно работает) видимо это какая то тонкость 2008...

Я удалил Visual Studio 2008 Express Edition, и установил Visual Studio 2008 Professional Edition. Но легче не стало...

уже не знаю, что и думать...

Ответить

Номер ответа: 12
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #12 Добавлено: 29.09.08 00:58
подробно о потере фокуса в вопросе: форма отображается, но не получает фокус...
... вот только коментариев пока нет...

Ответить

Номер ответа: 13
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #13 Добавлено: 30.09.08 01:20
почему form.show() не оставляет форму видимой?

Я же написал почему - основной поток завершает свою работу и вместе с этим работу всего приложения.

MSDN пока что описывает sub main() - как главную процедуру проекта, с которой должен начинаться любой проект!!! В процессе загрузки приложения из нескольких форм, например можно визуализировать SplashScreen, а в конце процедуры указать - какую форму вывести первой.

Ну тебе же показали как Application.Run работает, что не ясно?

Например в VB6 я делал примерно так:

Забудь о том как ты это делал в VB6, здесь все по другому.

Skywalker пишет, что в 2005 все прекрасно работает) видимо это какая то тонкость 2008...

Никаких тонкостей совершенно нет.

Я удалил Visual Studio 2008 Express Edition, и установил Visual Studio 2008 Professional Edition. Но легче не стало...

Между этими двумя продуктами тоже разницы нет, в них все одинаково работает.

уже не знаю, что и думать...

Перечитай еще раз тему, тебе на все вопросы ответили

Ответить

Номер ответа: 14
Автор ответа:
 Павел



Вопросов: 9
Ответов: 15
 Профиль | | #14 Добавлено: 02.10.08 10:36
по моему должно быть f.Showdialog

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 02.10.08 15:35
Какой нафиг Showdialog? Зачем ему модальная форма нужна? Steel Brand достаточно грамотно все растолковал всем! Описаное выше поведение формы вполне объяснимо и никаких тонкостей тут нет. Просто надо представлять себе механизм работы нетовского приложения. Основной поток завершает работу, соответственно и все приложение завершается.. поэтому форма и исчезает. Чтобы это понять достаточно взглянуть на код стандартной процедуры Main которая генерируется при создании приложения..

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам