|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Скорее всего буду использовать вариант запуска через main(), т.е. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
хотя думаю main/стартовая форма вопрос можно ставить одинаково. .Visible=false в конструкторе делать в .Net нельзя. В frm1_Load это не работает. В frm1_Shown это делать поздно - она промелькнет. !!! frm1_Load должна отрабатывать (в .Net есть какие-то идиотские методы но при этом не отрабатывает Load) Какие нормальные четкие варианты? Согласен на API. WM_CREATE ловить через Protected Overrides Sub WndProc ? и переопределять стиль окна? Обсуждать зачем желания нет. Консоль не годится. Например форма нужна для TrayIcon или если мне нужен валидный Handle/Text окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 19:49 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Дмитрий77Какие нормальные четкие варианты? Согласен на API. WM_CREATE ловить через Protected Overrides Sub WndProc ? и переопределять стиль окна? ты всё через задний проход делаешь? Пока форме Show() не скажешь, она никак не появится . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 20:26 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Изопропил, опять ты со своим задним проходом а полезной информации в твоих словах ноль. И вроде ведь разбираешься и понимаешь о чем я говорю и что любое окно имеет право быть создано без стиля WS_VISIBLE. >Пока форме Show() не скажешь Да хоть Application.Run(Form1) хоть .Show хоть .ShowDialog Вот мне и нужно чтоб было Load() без Show(). А в .Net конструктивно так не получается. Но обойти думаю можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 20:45 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Дмитрий77, а зачем обходить? Приложение прекрасно запускается и без показа формы. А логику, что Вы запихнули в Load, следует вынести в отдельный класс. ООП и никаких костылей :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 21:29 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
skyANA, А как предлагаешь? Пример кода не дашь? Исходим из того что форма мне нужна в "запущенном" виде но без показа ее самой. Т.е. есть на ней таймер - должен тикать. Есть меню - должно функционировать (то кот. в трей выводится, ну с этим пока не разбирался). Причем именно форма должна "держать приложение" Имею ввиду что Application.Run(Form1) - передает управление форме из main() и main не завершается до закрытия формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 21:42 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Дмитрий77, с разборок с треем и следует начинать форма не нужна, нужен ApplicationContext ( с иконкой, меню и т д) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 22:25 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Дмитрий77, ну вот откопал проект времён .Net 2.0 (на C#): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 22:37 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Ну и содержимое Sub main(): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 22:41 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Накидал пример без "главной" формы Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 22:51 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
ИзопропилНакидал пример без "главной" формы Мне окно нужно - с handle и с заголовком, по которому его можно найти извне. И скажем так, нет желания создавать подконтролы ApplicationContext и обработчики событий из кода -больше устраивает стандартная модель формы. skyANA, skyANA Код: c# 1. 2. 3. 4. 5.
У тебя из-за Application.Run() надо делать Application.Exit() Я привык закрывать форму когда Application.Run(mainForm) предотвращает main() от выхода. Опять же, при Application.Run() мало того что не работает Load формы(но это ладно, бог с ним), ее handle/text (который мне нужен) автоматом не грузится. За пример с Net-овским NotifyIcon спасибо, но скорее всего мне все-таки придется использовать родную Shell_NotifyIcon+ NOTIFYICONDATA. У меня там довольно сложная конструкция (меню+уведомления+примечание при наведении мыши в стиле висты) и я не уверен что Net-обертка это покрывает хотя бы частично и реально хотя бы комбинировать - надо смотреть возможности контрола. ================= По теме вопроса (как я его задал, а не что можно придумать вместо) вроде как прокатывает такой вариант: В конструкторе формы: ShowInTaskBar = False WindowState=Minimized Код запуска такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
По крайней мере это работает без мультипликаций и обеспечивает ожидаемое поведение. Me.Visible = False в Load срабатывает корректно (при этой конфигурации конструктора) Последовательность (проверял) получается такая: Код: vbnet 1. 2. 3. 4. 5.
Т.е. реально форма загружается с "изначально" Visible=False, при этом имеет handle, Load отрабатывает и main() держится именно за счет загруженной формы. Надо еще смотреть, насколько этот вариант приемлим и безглючен. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 02:14 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Дмитрий77, с чем воюешь - непонятно Дмитрий77У тебя из-за Application.Run() надо делать Application.Exit() Я привык закрывать форму когда Application.Run(mainForm) предотвращает main() от выхода. закрывай, какая разница? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 04:44 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
ИзопропилДмитрий77, с разборок с треем и следует начинать форма не нужна, нужен ApplicationContext ( с иконкой, меню и т д)Зачем ApplicationContext? Begins running a standard application message loop on the current thread, without a form. Произвольный Singleton/StaticClass, для хранения меню, таймеров и прочего - вполне устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 05:56 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Алексей К Begins running a standard application message loop on the current thread, without a form. здесь и ответ - авторMost Windows Forms developers will not need to use this version of the method. You should use the Run(Form) overload to start an application with a main form, so that the application terminates when the main form is closed. For all other situations, use the Run(ApplicationContext) overload, which supports supplying an ApplicationContext object for better control over the lifetime of the application. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 06:10 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
ИзопропилАлексей К Begins running a standard application message loop on the current thread, without a form. здесь и ответ - авторMost Windows Forms developers will not need to use this version of the method. You should use the Run(Form) overload to start an application with a main form, so that the application terminates when the main form is closed. For all other situations, use the Run(ApplicationContext) overload, which supports supplying an ApplicationContext object for better control over the lifetime of the application. Что нам даёт "better control over the lifetime of the application"? Что я не смогу сделать, используя глобальный объект Application? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 07:32 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
Дмитрий77За пример с Net-овским NotifyIcon спасибо, но скорее всего мне все-таки придется использовать родную Shell_NotifyIcon+ NOTIFYICONDATA.Надо, используйте. Только используйте правильно: напишите свой компонент (или поищите готовый). А не вбивайте сбоку костыли к стандартным. Чтобы не создавать топики вроде этого :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 09:23 |
|
А как грамотно стартануть Form1 с изначально .Visible=false ?
|
|||
---|---|---|---|
#18+
skyANAДмитрий77За пример с Net-овским NotifyIcon спасибо, но скорее всего мне все-таки придется использовать родную Shell_NotifyIcon+ NOTIFYICONDATA.Надо, используйте. Только используйте правильно: напишите свой компонент (или поищите готовый). А не вбивайте сбоку костыли к стандартным. Чтобы не создавать топики вроде этого :) Не-не. Уже глянул. Мешать ничего не буду. Net-компонент NotifyIcon не поддерживает NOTIFYICON_VERSION_4, т.е. например для Ballon Notification можно использовать только 4 маленькие стандартные иконки (error, info...). Не годится он. >Чтобы не создавать топики вроде этого Ну, собственно топик этот был на совершенно другую тему. Как всегда съехали в сторону от темы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 13:17 |
|
|
start [/forum/topic.php?fid=20&fpage=95&tid=1401957]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
108ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 345ms |
total: | 548ms |
0 / 0 |