gonzales

Как убить кнопку кликнув на нее саму

8 сообщений в этой теме

Доброго времени суток!

Помогите советом, как убить кнопку кликнув на нее. Создаю на скролбоксе динамический массив кнопок (наследники Trectangle). По нажатию (onClick) любой кнопки из массива весь массив должен уничтожиться. Естественно это приводит к ошибке. В VCL я бы использовал POSTMESSAGE но в firemonkey затрудняюсь ответить. На ум пока приходит только Таймер)))) Но это же жесть)))

Приложение кроссплатформенное, поэтому решение нужно соответствующее.

Заранее всем спасибо за советы. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

PS. Причем, что самое странное ошибка возникает не всегда, она плавающая, причем по какой-то неведомой причине возникает только при клике на третью кнопку))). Сама ошибка никак не сказывается на работоспособности программы, все продолжает работать корректно и больше ошибка не повторяется, но при перезапуске программы опять всплывает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

MyControl.Release;

Это отложенное удаление, реализованное самой платформой.

Надо только не забывать после Release заNil-ить ссылку на объект в массиве. Ну и вместо массива лучше использовать дженериковский список.

Изменено пользователем kami
Brovin Yaroslav понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, gonzales сказал:

У TRectangle нет метода release.((

Он никуда не мог деться:

 

Безымянный.png

RoschinSpb и Brovin Yaroslav понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, извиняюсь, я просто удалял компоненты в цикле

(Form1.RoomsScrollBox.Components[i]).Free;

А когда я написал 

(Form1.RoomsScrollBox.Components[i] as TRoom).Release;

То метод появился. Но это понятно у TComponent его нет, только у TObject. 

Но сути вопроса это не изменило, по Release компонент пропадает, но он еще в памяти, соответственно я не могу создать на его месте другой компонент с таким именем.

 

Вообще задача следующая, есть дерево, находясь на ветке этого дерева я визуализирую все имеющиеся подветки (TRectangle) в ScrollBox. При нажатии на подветку я очищаю весь ScrollBox и выстраиваю новую визуализацию. Может подскажете, как это более грамотно реализовать? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, gonzales сказал:

соответственно я не могу создать на его месте другой компонент с таким именем.

Зачем вообще указывать имя компоненту, создаваемому в runtime? Они прекрасно живут и без этого, а для идентификации конкретного - есть куча свойств TagXXX

Brovin Yaroslav и gonzales понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 минут назад, kami сказал:

Зачем вообще указывать имя компоненту, создаваемому в runtime? Они прекрасно живут и без этого, а для идентификации конкретного - есть куча свойств TagXXX

Обалдеть, спасибо!!!!!!!

Вот изящное решение!!!

Действительно, все работает без всяких имен. Вот что значит привычка, всегда писал с присвоением имени)))) Даже не думал, что можно не указывать имя вообще!

 

Еще раз спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу