Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

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

 

  Вопрос: Я новичек и хотелбы узнать... Добавлено: 15.07.06 16:04  

Автор вопроса:  Максим Е. | ICQ: 322-811-909 

Ответить

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

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #16 Добавлено: 20.07.06 23:31
Если бы экземпляр формы существовал, то при старте приложения выполнялся бы весь код из всех Form_Initialize всех форм. Поэтому форма не существует. Она неявно создаётся при первом обращении.


Гм. И чем это отличается от того что я только что сказал?

Да, экземпляр класса создается при первом обращении к свойству, но каким образом ты из этого вывел, что формы не существует?

Она очень даже существует, по ней можно покликать, потягать по экрану, попробуй.
Если б ее не существовало, после Form1.Show мы бы ничего так и не увидили, согласен?

Судя по твоей логике, форм, создаваемых "классическим" методом, тоже не существует, потому что при запуске приложения не выполняется Form_Initialize. Бред, правда?

Да и вообще, что ты хочешь сейчас рассказать мне?
Ты видел во что после компиляции превращается проект? Там код, практически аналогичный тому, который пишут кулибины, т.е. имеем некое глобальное свойство, в котором храним экземпляр формы, сообветственно обращение к этому экземпляру идет через это свойство вот и все.
Разница только в том, что "неправильным" методом все делается моментально, а для "правильного" нужно еще напистаь десяток лишних строчек кода.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #17 Добавлено: 20.07.06 23:36
Brand, ты же сам прекрасно понимаешь, что неявное обращение является причиной многих трудноотлавливаемых багов. Потом те же новички, не понимая происходящего, начинают задавать вопросы типа: А почему у меня приложение остается висеть в памяти? и т.д.. Ты же сам говоришь,что этот способ развращает несформировавшиеся умы.. и тут же утверждаешь .. цитирую:
Не страшно что новички используют єтот метод
А я считаю, что это страшно.. ибо ничему хорошему это не научит, а наоборот.. скорее даже навредит.. По сути, этот способ вообще противоречит принципам ООП. И скорее всего его оставили только ради облегчения перехода с VB6..
Если есть класс, то должен вызываться его конструктор.. и никак иначе.. (имхо)

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #18 Добавлено: 20.07.06 23:49
И создав свой конструктор тот же новичок будет долго думать .. почему .Show вызывает исключение..
И чтобы ты не говорил.. CSerg по любому прав.. это минус для 2005 студии(имхо)
И вообще.. для чего ввели этот извращенный способ?.. и это при том, что больше ни один объект таким образом не создашь.. только форму!

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #19 Добавлено: 21.07.06 01:23
IDisposable никто не отменял, так что утечки памяти тут аргумет совсем не канает.

По сути, этот способ вообще противоречит принципам ООП.

Ничем он не противоречит.
Класс есть? Есть. Экземпляр класса есть? Есть.
Наследование? Гм. Класс наследуется от Form, наследование имеем. Остальные вкусности наследования тоже имеем.

Если есть класс, то должен вызываться его конструктор.. и никак иначе.. (имхо)

Если ты сделаешь форме конструктор, этот конструктор будет вызываться, нельзя перескочить через свою голову.

И создав свой конструктор тот же новичок будет долго думать .. почему .Show вызывает исключение..

Исключения не будет, можем поспорить на 100 баллов рейтинга.

И вообще.. для чего ввели этот извращенный способ?..

Для удобства.
Ты не поверишь, я считаю себя професионлом .NET, и сейчас использую этот способ.
Позор мне, извращенцу, да?

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #20 Добавлено: 21.07.06 01:57
Исключения не будет, можем поспорить на 100 баллов рейтинга.
ага.. до исключения дело даже не дойдет... компилятор вообще не пропустит .Show без вызова конструктора..
Ты не поверишь, я считаю себя професионлом .NET, и сейчас использую этот способ.
Сам себя ты можешь считать хоть пупом земли.. это еще ни о чем не говорит.. Лично я предпочитаю четко знать когда у меня форма инициализируется, загружается и отображается только по моему желанию.. Одно дело если ты четко представляешь и осознаешь, что происходит при неявном обращении к форме, и отдаешь себе отчет чем это чревато и где могут быть грабли.. И совершенно другое дело когда это делает новичок, который не понимает разницы между классом и экзкмпляром класса, и абсолютно не в состоянии осознать процессы происходящие при со создании формы как таковой..
И о каком IDisposable ты вообще ведешь речь, когда он не знает как запустить форму!!!!!!!! Для него это равносильно танцу с бубнами... тайне, покрытой мраком..

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #21 Добавлено: 21.07.06 14:48
ага.. до исключения дело даже не дойдет... компилятор вообще не пропустит .Show без вызова конструктора..

Слух, хорош ерись нести, а?
О каком вызове конструктора может вообще идти речь, если код даже банально не скомпилируется?

Лично я предпочитаю четко знать когда у меня форма инициализируется, загружается и отображается только по моему желанию..

Мне честно говоря абсолютно поифг когда форма будет загружена, а когда проинициализирована, но даже я знаю, когда какая часть этого процеса произойдет.

Другое дело, что человек даже не знает, и ему абсолютно пофиг, когда и при каких обстоятельствах будет создан экземпляр.

Одно дело если ты четко представляешь и осознаешь, что происходит при неявном обращении к форме, и отдаешь себе отчет чем это чревато и где могут быть грабли..

Что такое "неявное обращение"?
Какие тут вообще могут быть грабли?

Вообще, если ты такой крутой и пишешь такие сложные приложения, то тебе этот метод по определению не пригодится, и я тебе даже не пытаюсь его навязывать, другое дело, что в 99% случаев то что предлагаю я - оптимальный выбор.

И совершенно другое дело когда это делает новичок, который не понимает разницы между классом и экзкмпляром класса, и абсолютно не в состоянии осознать процессы происходящие при со создании формы как таковой..


И ты хочешь сказать что новичка больше обрадует твой "правильный" метод чем мой "неправильный"? Я бы на это не надеялся.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #22 Добавлено: 21.07.06 15:22
Мы можем бодаться сколь угодно долго, но в любом случае.. каждый из нас останется при своем мнении, какой из способ есть более корректный и правильный..
Ты считаешь,что твой способ - оптимальный.. я же считаю, что это зло, которое надо обходить стороной..

Ответить

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



Разработчик

Вопросов: 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
        ;Dim mySaveDialog As New SaveFileDialog
        With mySaveDialog
            .FileName = "*.txt"
            .Filter = "Текстовые документы (*.txt)|*.txt|Все файлы |*.*"
        End With
        ;Dim data As String = txtBox.Text
        ;Dim sWriter As IO.StreamWriter
        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
        ;Dim data As String = txtBox.Text
        ;Dim sWriter As IO.StreamWriter
        sWriter = IO.File.AppendText()
        sWriter.Write(data)
        sWriter.Close()
        End Sub

Ответить

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



Вопросов: 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
Автор ответа:
 EROS



Вопросов: 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

Ответить

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

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



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