|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
||||||
Самоуничтожение панели10.10.2013, 16:20. Показов 2487. Ответов 25
Метки нет (Все метки)
- Здравствуйте Форумчане! У меня возник такой вопрос:
В моей программе сделан VCL-компонент на базе TPanel (TMy_Panel). На ней, в свою очередь, динамически создается TComboBox. - Создавать и удалять эту МоюПанель ИЗВНЕ конечно просто:
a) - передавать выбранное значение (строку) КомбоБокса в основную программу; b) - уничтожать саму МоюПанель (за дальнейшей ненадобностью). - Т.е. как уничтожить МоюПанель из кода самой МоейПанели ? ... Заранее благодарен всем!
0
|
||||||
| 10.10.2013, 16:20 | |
|
Ответы с готовыми решениями:
25
Самоуничтожение файла Самоуничтожение объекта класса |
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
||||||
| 10.10.2013, 16:22 | ||||||
0
|
||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||||||
| 10.10.2013, 16:50 | ||||||
|
Т.е из метода твоего комбобокса?
А если так?
0
|
||||||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 10.10.2013, 16:52 | |
|
Практически это можно осуществить, но только через Try - __finally , а вообще - не следует так вольно с компонентами... .
1
|
|
|
|
|
| 10.10.2013, 17:43 | |
|
0
|
|
|
|
|||||||
| 10.10.2013, 17:49 | |||||||
|
вот какой код у себя проверял:
1
|
|||||||
|
|
||||||
| 10.10.2013, 22:30 | ||||||
|
kzru_hunter, метод OnPanelDblClick является методом класса формы. Он не имеет прямого отношения к классу панели, который ты даже и не наследовал. Пример некорректный.
Попробуй погонять такой код, причем многомного раз. ![]()
2
|
||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||
| 10.10.2013, 23:27 | |||
|
0
|
|||
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
|
| 10.10.2013, 23:29 | |
|
Ну стоит последней строкой в методе delete this, и что? Это же последняя строка, больше к св-вам this мы в этом методе мы не обращаемся. Откуда взяться ошибкам?
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 11.10.2013, 00:00 | ||
|
Вот мне, кажется, еще ни разу не приходилось наследовать что-то кроме TForm. Но это, возможно, объясняется тем, что я решаю достаточно тривиальные задачи. Вот на BC 502 (если кто помнит) мне приходилось наследовать буквально все стандартные компоненты. Добавлено через 13 минут Вот сейчас буквально ради любопытства grep-ом посмотрел все свои Бюльдеровские проекты. Однажды пытался унаследовать кнопку, дабы изменить ее цвет. Не получилось - бросил. А так - только TForm.
0
|
||
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
|
| 11.10.2013, 00:12 | |
|
0
|
|
|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
|
| 11.10.2013, 16:09 [ТС] | |
|
- Прошу прощения за отсутствие, должен был уехать на время ...
- nick42, через try - __finally - не догадался! Надо будет подумать ... - Варианты kzru_hunter и BRcr тоже надо попробовать. Они отличаются тем, что в 1-м обработчик двойного щелчка динамической Панели является ВНЕШНИМ для Панели методом (методом Основной Формы), а во 2-м ВНУТРЕННИМ для Панели методом. - Я уже делал когда-то вариант (правда не для Панели а для Формы) и нечто среднее между этими двумя вариантами. Делал метод Основной Формы - "удалитель" динамической вспомогательной Формочки. Передавал указатель на него через параметры конструктора при создании динамической Формочки. И там, внутри динамической Формочки, когда было нужно удалить динамическую Формочку, запускал этот метод. Этот вариант у меня благополучно работал. К сожалению никак не могу найти этот небольшой проект, а то бы выложил. - В моем-же варианте с Панелью я делаю примерно то-же, что описал выше, но получаю все время исключение: - "Control has no parent window", что не так уж и далеко от AV. Можете посмотреть сами этот проект, кто захочет в прикрепленном архиве. - Но, видимо, правы UI и nick42: - "Незачем дразнить гусей !" Видимо лучше создавать МоюПанель один раз (и как невидимую). А ее видимостью легко управлять и ИЗВНЕ, и ИЗНУТРИ МоейПанели. Сэкономить хотел на размере загрузочника ... - Всем, всем большое спасибо за участие !
0
|
|
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
|
| 11.10.2013, 16:32 | |
|
Скачал test_MyPanel.rar. Открыл, скомпилил, запустил. Нажал кнопку "открыть", нажал кнопку "закрыть". Повторил несколько раз. Никаких ошибок. Builder XE. Что я делаю не так?
0
|
|
|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
|
| 11.10.2013, 16:57 [ТС] | |
|
- Простите gumi250, говорил очень много и забыл дать инструкцию по пользованию:
a) - нажмите кнопку - "Открыть"; b) - Введите какое-либо значение из списка КомбоБокса или наберите новую строку в нем; c) - нажмите "Enter" для принятия этой строки; и далее все удовольствия ...
0
|
|
|
|
|
| 11.10.2013, 17:14 | |
|
Я вижу, что напутал с контекстом обращения, и пост мой был понят неправильно, за что прошу простить.
![]() Staut, то, что выложил я, это не вариант - это демонстрация того, как делать не надо. И предложен код был, только чтобы кто-нибудь смог убедиться в ненадежности данного подхода.
1
|
|
|
|
|||||||||||
| 11.10.2013, 17:16 | |||||||||||
|
К сожалению, в первый раз встречается в глаза ситуация с самоудалением экземпляра класса. Поэтому не совсем понял проблему.
Но в принципе тот код, что я до этого приводил, вполне легален. Is it legal (and moral) for a member function to say delete this? Поэтому, коде BRcr также не должен вызывать исключений (проверял у себя). Но вот если ещё усложнить код, например, так:
Из-за этого я решил, что проще заставить кого-то другого удалить этот самый panel. Никаких идей не приходило в голову, кроме как отправлять сообщение, например в очередь главного потока, что обработчик смог его обработать и удалить этот самый объект(panel):
1
|
|||||||||||
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
|
| 11.10.2013, 17:33 | |
|
Когда у меня возникла такая проблема, тоже пользовался WM_USER. На сколько я понимаю тут проблема вовсе не в самоудалении класса, а в удалении комбобокса из функции-обработки его нажатия. В этом легко убедится если не удалять панель, а удалить только комбобокс.
1
|
|
|
|
||||||||
| 11.10.2013, 17:40 | ||||||||
0
|
||||||||
| 11.10.2013, 17:40 | |
|
Помогаю со студенческими работами здесь
20
Самоуничтожение базы... :)
Самоуничтожение объекта Самоуничтожение данных на диске Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|