gonzales

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

В теме 8 сообщений

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

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

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

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

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


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

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

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


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

MyControl.Release;

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

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

Изменено пользователем kami

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


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

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

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

 

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

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


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

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

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

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

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

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

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

 

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

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


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

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

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

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


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

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

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

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

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

 

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу