Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
8 / 8 / 0
Регистрация: 09.02.2012
Сообщений: 48

Каким образом применять метод Dispose

12.05.2012, 14:22. Показов 3288. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток!

Вопрос:

Имеется две формы, одна из форм вызывается так:
VB.NET
1
frmnew.ShowDialog()
В процессе работы я создаю динамически ряд контролов на форме и при закрытии и повторном открытии обнаружил, что динамически созданные контролы остались на форме. Возможно это правильно, но мне не нужно.

Сделал так:

VB.NET
1
2
3
Dim frmnew As New FrmNew
        frmnew.ShowDialog()
        frmnew.Dispose()
Правильно ли? Для меня - поведение правильное: динамически созданные контролы не сохраняются на форме. А граблей тут нет?

Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.05.2012, 14:22
Ответы с готовыми решениями:

Каким образом работает метод clone() ?
Когда мы переопределяем метод clone, то мы вызываем super.clone(). Он должен возвращать Object, но каким образом мы потом можем этот...

Каким образом метод Fill заносит данные в mfdataset
Подскажите какие данные будут в mfdataset? По идее данные должны быть только в mftables, а в mfdataset должно быть пусто. Но данные в...

Каким образом через метод GetType, вызывается свойство Name
При изучении перечислений наткнулся на непонятную для меня штуку. Есть некая переменная "е" типа перечисление, что бы получить...

11
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
12.05.2012, 16:27
Stas43, обычно метод Dispose() я пишу в событии закрытия формы
1
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
12.05.2012, 17:42
Stas43, А каким образом ты создаешь контролы, что при закрытии и повторном открытии они у тебя сохраняются? Они вообще-то должны автоматически уничтожаться после закрытия формы.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
12.05.2012, 18:11
Цитата Сообщение от Stas43 Посмотреть сообщение
VB.NET
1
Dim frmnew As New FrmNew
Eugene22, а не создает ли он случайно экземпляры динамически созданной формы...
0
8 / 8 / 0
Регистрация: 09.02.2012
Сообщений: 48
12.05.2012, 19:05  [ТС]
Цитата Сообщение от Eugene22 Посмотреть сообщение
Stas43, А каким образом ты создаешь контролы, что при закрытии и повторном открытии они у тебя сохраняются? Они вообще-то должны автоматически уничтожаться после закрытия формы.
Ну как... обычно, "дословно" не вспомню, но в конце типа ...Controls.Add(мой объект) Конечно, при некоторых моих условиях, скажем так: кнопку нажал - контролы создались!

Т.о. на форме я генерирую нужное количество нужных мне кнопок и т.п. элементов. И в обычном исполнении, при закрытии формы и повторном открытии (через ИмяФормы.ShowDialog()) созданные ранее объекты болтаются. А почему бы им не быть там? Поведение-то верное! Я же захотел, что бы форма открывалась и показывалась БЕЗ созданных ранее (при предыдущих открытиях) контролах. Вот и все.

Насчет:
Цитата Сообщение от Eugene22 Посмотреть сообщение
Stas43, Они вообще-то должны автоматически уничтожаться после закрытия формы.
Видимо нет, не уничтожаются во всяком случае у меня: болтаются почему то

Добавлено через 1 минуту
Цитата Сообщение от Памирыч Посмотреть сообщение
Eugene22, а не создает ли он случайно экземпляры динамически созданной формы...
Вот, вот! Я и спросил, не получается ли чего такого, чего не должно быть???

Добавлено через 2 минуты
Цитата Сообщение от Памирыч Посмотреть сообщение
Stas43, обычно метод Dispose() я пишу в событии закрытия формы
ОК! Переделаю!
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
12.05.2012, 19:56
Stas43, ты неправильно вызываешь форму. Смотри, есть, например, первая главная форма - Form1, и есть вторая форма, например, FrmNew. И мы хотим вызвать из первой формы вторую по нажатию кнопки, например. Тогда мы пишем:
VB.NET
1
2
3
4
5
6
7
8
Public Class Form1
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim frmnew1 As New FrmNew()
        frmnew1.Show() 
 
    End Sub
End Class
В этом случае у нас создается экземпляр класса или объект. После того как на второй форме мы нажмем крестик, эта форма, как и все ее контролы, будет уничтожена и для нее автоматически сработает деструктор.

Вызов frmnew.ShowDialog() будет не совсем правильным. Во-первых, нежелательно создавать переменные с тем же именем, что и у класса, даже если используется разный регистр, так как VB.NET регистронезависимый.
Во-вторых, при этом вызове будет создаваться не экземпляр объекта, а модальное окно, которое даже при нажатии на крестик не уничтожается, а скрывается - смотри соответствующую статью на msds - http://msdn.microsoft.com/ru-r... kbedk.aspx

Хотя я даже пренебрег всеми правила именования переменных и сделал так:
VB.NET
1
2
Dim form2 As New Form2
        form2.ShowDialog()
и у меня все равно динамические контролы уничтожались. Не уничтожались они только, если бы я не использовал переменную, а вызывал бы метод через имя класса
0
8 / 8 / 0
Регистрация: 09.02.2012
Сообщений: 48
12.05.2012, 22:34  [ТС]
Я использую .ShowDialog исключительно для того, чтобы вновь вызванное окно было активным и не давало переключить фокус активности на родительское окно, пока оно явно не закроется. По указанной ссылке прочитал, и там, кстати, сказано "...Поскольку форма, отображаемая в виде диалогового окна, скрывается, а не закрывается, следует вызывать метод Dispose формы, если она больше не нужна приложению." Т.о., в принципе, можно использовать.
По поводу нежелательности создания переменные с тем же именем, что и у класса - согласен, исправлю и намотаю на ус
По совету Памирыча впихну Dispose() в событие закрытия формы. Ну и после выходных еще раз все проверю.

Спасибо всем!
0
 Аватар для eJ_Studio
169 / 149 / 14
Регистрация: 13.07.2011
Сообщений: 477
13.05.2012, 15:51
Eugene22,
Цитата Сообщение от Eugene22 Посмотреть сообщение
при этом вызове будет создаваться не экземпляр объекта, а модальное окно, которое даже при нажатии на крестик не уничтожается, а скрывается
То есть каким макаром тогда делать это правильно?


Цитата Сообщение от Eugene22 Посмотреть сообщение
Dim form2 As New Form2 form2.ShowDialog()
VB.NET
1
Dim form2 As New Form2 form2.Show  form2.ShowDialog()
так?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
13.05.2012, 16:10
Цитата Сообщение от eJ_Studio Посмотреть сообщение
так?
почти, я уже выше написал, что лучше переменные создавать с именами, которые не являются именами классов, так как VB - язык регистронезависимый
то есть
VB.NET
1
2
Dim f As New Form2()
f.Show()
0
 Аватар для eJ_Studio
169 / 149 / 14
Регистрация: 13.07.2011
Сообщений: 477
13.05.2012, 18:41
Цитата Сообщение от Eugene22 Посмотреть сообщение
создавать с именами, которые не являются именами классов
причем здесь это??? а как же тогда сделать модальным окно?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
13.05.2012, 19:22
Цитата Сообщение от eJ_Studio Посмотреть сообщение
как же тогда сделать модальным окно?
ShowDialog
0
 Аватар для eJ_Studio
169 / 149 / 14
Регистрация: 13.07.2011
Сообщений: 477
13.05.2012, 20:03
ну тыж говоришь что нельзя сразу шоудиалог делать..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2012, 20:03
Помогаю со студенческими работами здесь

Каким образом можно адекватно определить, какой метод работает быстрее?
Ищу тут оптимальные методы для выполнения разных операций и пытаюсь проводить временные тесты. Для примера возьмём две операции. Нужно...

Каким образом можно вызвать метод submit() формы с именем fio?
Каким образом можно вызвать метод submit() формы с именем fio? (Ответ считается верным, если отмечены все правильные варианты ответов.) ...

Каким образом работает метод reduce() и как эти строчки работают
Какие параметры принимает функция и каким образом данные параметры могут быть равно undefined Прочитал документация, но так и не...

Каким образом может быть не указана ссылка на СТАТИЧЕСКИЙ метод СТАТИЧЕСКОГО класса?
Ещё раз здравствуйте. Ответьте пожалуйста, каким образом происходит ошибка System.NullReferenceException: "Ссылка на объект не...

Каким образом изменить файл для загрузки в дочернем классе, если метод описан в родительском?
Доброго времени суток. У меня одна форма порождена от другой, и соответственно получает все её методы и компоненты. Тоесть она является...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru