Вопрос: Я новичек и хотелбы узнать... | Добавлено: 15.07.06 16:04 |
Автор вопроса: ![]() |
Ответы | Всего ответов: 28 |
Номер ответа: 16 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #16 | Добавлено: 20.07.06 23:31 |
Если бы экземпляр формы существовал, то при старте приложения выполнялся бы весь код из всех Form_Initialize всех форм. Поэтому форма не существует. Она неявно создаётся при первом обращении.
Гм. И чем это отличается от того что я только что сказал? Да, экземпляр класса создается при первом обращении к свойству, но каким образом ты из этого вывел, что формы не существует? Она очень даже существует, по ней можно покликать, потягать по экрану, попробуй. Если б ее не существовало, после Form1.Show мы бы ничего так и не увидили, согласен? Судя по твоей логике, форм, создаваемых "классическим" методом, тоже не существует, потому что при запуске приложения не выполняется Form_Initialize. Бред, правда? Да и вообще, что ты хочешь сейчас рассказать мне? Ты видел во что после компиляции превращается проект? Там код, практически аналогичный тому, который пишут кулибины, т.е. имеем некое глобальное свойство, в котором храним экземпляр формы, сообветственно обращение к этому экземпляру идет через это свойство вот и все. Разница только в том, что "неправильным" методом все делается моментально, а для "правильного" нужно еще напистаь десяток лишних строчек кода. |
Номер ответа: 17 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #17 | Добавлено: 20.07.06 23:36 |
Brand, ты же сам прекрасно понимаешь, что неявное обращение является причиной многих трудноотлавливаемых багов. Потом те же новички, не понимая происходящего, начинают задавать вопросы типа: А почему у меня приложение остается висеть в памяти? и т.д.. Ты же сам говоришь,что этот способ развращает несформировавшиеся умы.. и тут же утверждаешь .. цитирую:
Не страшно что новички используют єтот метод А я считаю, что это страшно.. ибо ничему хорошему это не научит, а наоборот.. скорее даже навредит.. По сути, этот способ вообще противоречит принципам ООП. И скорее всего его оставили только ради облегчения перехода с VB6..
Если есть класс, то должен вызываться его конструктор.. и никак иначе.. (имхо) |
Номер ответа: 18 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #18 | Добавлено: 20.07.06 23:49 |
И создав свой конструктор тот же новичок будет долго думать .. почему .Show вызывает исключение..
И чтобы ты не говорил.. CSerg по любому прав.. это минус для 2005 студии(имхо) И вообще.. для чего ввели этот извращенный способ?.. и это при том, что больше ни один объект таким образом не создашь.. только форму! |
Номер ответа: 19 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #19 | Добавлено: 21.07.06 01:23 |
IDisposable никто не отменял, так что утечки памяти тут аргумет совсем не канает.
По сути, этот способ вообще противоречит принципам ООП.
Ничем он не противоречит. Класс есть? Есть. Экземпляр класса есть? Есть. Наследование? Гм. Класс наследуется от Form, наследование имеем. Остальные вкусности наследования тоже имеем. Если есть класс, то должен вызываться его конструктор.. и никак иначе.. (имхо)
Если ты сделаешь форме конструктор, этот конструктор будет вызываться, нельзя перескочить через свою голову. И создав свой конструктор тот же новичок будет долго думать .. почему .Show вызывает исключение..
Исключения не будет, можем поспорить на 100 баллов рейтинга. И вообще.. для чего ввели этот извращенный способ?..
Для удобства. Ты не поверишь, я считаю себя професионлом .NET, и сейчас использую этот способ. Позор мне, извращенцу, да? |
Номер ответа: 20 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #20 | Добавлено: 21.07.06 01:57 |
Исключения не будет, можем поспорить на 100 баллов рейтинга. ага.. до исключения дело даже не дойдет... компилятор вообще не пропустит .Show без вызова конструктора..
Ты не поверишь, я считаю себя професионлом .NET, и сейчас использую этот способ. Сам себя ты можешь считать хоть пупом земли.. это еще ни о чем не говорит.. Лично я предпочитаю четко знать когда у меня форма инициализируется, загружается и отображается только по моему желанию.. Одно дело если ты четко представляешь и осознаешь, что происходит при неявном обращении к форме, и отдаешь себе отчет чем это чревато и где могут быть грабли.. И совершенно другое дело когда это делает новичок, который не понимает разницы между классом и экзкмпляром класса, и абсолютно не в состоянии осознать процессы происходящие при со создании формы как таковой..
И о каком IDisposable ты вообще ведешь речь, когда он не знает как запустить форму!!!!!!!! Для него это равносильно танцу с бубнами... тайне, покрытой мраком.. |
Номер ответа: 21 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #21 | Добавлено: 21.07.06 14:48 |
ага.. до исключения дело даже не дойдет... компилятор вообще не пропустит .Show без вызова конструктора..
Слух, хорош ерись нести, а? О каком вызове конструктора может вообще идти речь, если код даже банально не скомпилируется? Лично я предпочитаю четко знать когда у меня форма инициализируется, загружается и отображается только по моему желанию..
Мне честно говоря абсолютно поифг когда форма будет загружена, а когда проинициализирована, но даже я знаю, когда какая часть этого процеса произойдет. Другое дело, что человек даже не знает, и ему абсолютно пофиг, когда и при каких обстоятельствах будет создан экземпляр. Одно дело если ты четко представляешь и осознаешь, что происходит при неявном обращении к форме, и отдаешь себе отчет чем это чревато и где могут быть грабли..
Что такое "неявное обращение"? Какие тут вообще могут быть грабли? Вообще, если ты такой крутой и пишешь такие сложные приложения, то тебе этот метод по определению не пригодится, и я тебе даже не пытаюсь его навязывать, другое дело, что в 99% случаев то что предлагаю я - оптимальный выбор. И совершенно другое дело когда это делает новичок, который не понимает разницы между классом и экзкмпляром класса, и абсолютно не в состоянии осознать процессы происходящие при со создании формы как таковой..
И ты хочешь сказать что новичка больше обрадует твой "правильный" метод чем мой "неправильный"? Я бы на это не надеялся. |
Номер ответа: 22 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #22 | Добавлено: 21.07.06 15:22 |
Мы можем бодаться сколь угодно долго, но в любом случае.. каждый из нас останется при своем мнении, какой из способ есть более корректный и правильный..
Ты считаешь,что твой способ - оптимальный.. я же считаю, что это зло, которое надо обходить стороной.. |
Номер ответа: 23 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #23 | Добавлено: 21.07.06 15:41 |
Мы можем бодаться сколь угодно долго, но в любом случае.. каждый из нас останется при своем мнении, какой из способ есть более корректный и правильный..
Жму руку ![]() |
Номер ответа: 24 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 322-811-909 Вопросов: 1 Ответов: 6 |
Профиль | Цитата | #24 | Добавлено: 21.07.06 16:17 |
Я еще хочу узнать как присоединять текст к уже открытому в txtBox(TextBox1) файлу
Вот мой текст что нужно добавить или же исправить? rivate Sub MenuItem13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem13.Click ![]() With mySaveDialog .FileName = "*.txt" .Filter = "Текстовые документы (*.txt)|*.txt|Все файлы |*.*" End With ![]() ![]() sWriter = IO.File.AppendText() sWriter.Write(data) sWriter.Close() End Sub |
Номер ответа: 25 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 322-811-909 Вопросов: 1 Ответов: 6 |
Профиль | Цитата | #25 | Добавлено: 21.07.06 16:23 |
Я еще хочу узнать как присоединять текст к уже открытому в txtBox(TextBox1) файлуВот мой текст что нужно добавить или же исправить?
Private Sub MenuItem13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem13.Click ![]() ![]() sWriter = IO.File.AppendText() sWriter.Write(data) sWriter.Close() End Sub |
Номер ответа: 26 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #26 | Добавлено: 21.07.06 21:57 |
В 2005 можно сделать проще:
System.IO.File.AppendAllText("C:\Test.txt", "Bla Bla Bla"
![]() |
Номер ответа: 27 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 322-811-909 Вопросов: 1 Ответов: 6 |
Профиль | Цитата | #27 | Добавлено: 23.07.06 14:17 |
Да тоже можно и в VB.NET'e сделать но мне надо что бы когда в я открываю текстовой файл в TextBox'e при дописывании в него какой нибуть информации он дописывал в него ее (аналог notepad'a Ctrl+S) прошу помощи у знающик лиц, а критика в мое лицо о том что програмист сам должен грызть и добывать свои знания пошла мне на пользу, но к сожалению я немогу разобратся вот с этим примером см. выше |
Номер ответа: 28 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #28 | Добавлено: 23.07.06 20:55 |
Ctrl+S это , насколько я помню, сохранение данных.. И он не добавляет данные, а полностью переписывает их заново. Если я правильно тебя понял, то тебе надо просто сохранить данные из текстового поля в файл..
Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
System.IO.File.WriteAllText("C:\Test.txt", TextBox1.Text) End Sub |
|