Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
29 / 29 / 3
Регистрация: 11.02.2012
Сообщений: 339

Событие для динамически созданных ListBox

12.12.2013, 03:38. Показов 2122. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дело в том что ListBox'ы были созданы а цикле таким образом:

C++
1
TListBox *btns = new TListBox(ListBox1);
Мне нужно для всех этих ListBox'ов создать события OnDblClick, в котором начинаться все будет с:

C++
1
2
3
4
if(Название листбокса->ItemIndex!=-1)
    {
...
    }
Как это осуществить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2013, 03:38
Ответы с готовыми решениями:

События для динамически созданных кнопок
Доброе время суток! Я создал свой класс objekt (); //конструктор save_objekt(TOpenDialog *open_kart); ...

Вызов функции для динамически созданных компонентов через PopupMenu
На форме присутствует несколько компонентов, при нажатии на правую кнопку мыши вызывает PopupMenu. Вопрос, как при нажатии на какой-либо...

Удаление динамически-созданных компонентов
Использую класс, компонентами которого кроме всего прочего, являются StaticText и Edit, графическое изображение. Создаю экземпляр класса...

7
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
12.12.2013, 09:35
Цитата Сообщение от vetal0007 Посмотреть сообщение
Мне нужно для всех этих ListBox'ов создать события OnDblClick, в котором начинаться все будет с:

C++
1
2
3
4
if(Название листбокса->ItemIndex!=-1)
    {
...
    }
C++
1
2
TListBox *btns = new TListBox(ListBox1);
btns->OnDblClick="имя функции";
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596
12.12.2013, 11:02
- vetal0007, обычно, если создают ЛистБоксы динамически, то делают это примерно так:
C++
1
2
3
4
5
6
  // .........
  TListBox*  lb = new  TListBox( Par );
  lb->Parent = Par;
 
  // подключение обработчика двойного щелчка по ЛистБокс.
  lb->OnDblClick = &ListBoxDblClick;
, где Par - указатель на VCL-компонент - владелец этого ЛистБокса (то, на чем он должен располагаться).
Это может быть Форма (тогда вместо Par надо писать, например, Form1 или this, если динамический ЛистБокс
создается в обработчике этой Формы), или Панель или еще что-то ... У Вас-же владельцем Вашего динамического
ЛистБокса указан другой, по видимому статический ЛистБокс (ListBox1). Это вызывает у меня большие сомнения!
Проверьте пожалуйста ...

- А что касается создания и подсоединения обработчика двойного щелчка к динамическому ЛистБоксу, то
делается это в несколько этапов:

1) - В классе той Формы, на которой Вы создаете свой динамический ЛистБокс объявляется метод-обработчик:
C++
1
2
3
private:
  // обработчик двойного щелчка по ЛистБокс.
  void __fastcall  ListBoxDblClick(TObject *Sender);
2) - В файле реализации этой Формы определяется этот метод-обработчик:
C++
1
2
3
4
5
  // обработчик двойного щелчка по ЛистБокс.
  void __fastcall  TForm1::ListBoxDblClick(TObject *Sender)
  {
    .....
  }
3) - Подключается этот метод-обработчик к динамическому ЛистБоксу, как я уже показал в самом
верхнем из листингов (см. строки 5,6) ...

- Работать-же с динамическим ЛистБоксом в его обработчике двойного щелчка можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
  // обработчик двойного щелчка по ЛистБокс.
  void __fastcall  TForm1::ListBoxDblClick(TObject *Sender)
  {
    // получить указатель на ЛистБокс, по которому сделали двойной щелчек.
    TListBox*  lbp = (TListBox*)Sender;
    TListBox*  lbp = dynamic_cast<TListBox*>( Sender );  // или так ...
    // работа с динамическим ЛистБоксом.
    if ( lbp->ItemIndex != -1 )
    {
      .....
    }
  }
2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
12.12.2013, 11:21
Цитата Сообщение от Staut Посмотреть сообщение
Подключается этот метод-обработчик к динамическому ЛистБоксу, как я уже показал в самом верхнем из листингов
Там "амперсанд" - как зайцу пятая нога. Без него все прекрасно отработает...
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596
12.12.2013, 12:04
- UI, с год назад я на этом-же форуме читал жалобы одного форумчанина, что в его среде, сейчас не вспомню
какой, подключение просто, без амперсанда не работает!
- У меня на BCB6 работает и так и так. С тех пор я ставлю (&) вроде-бы для гарантии ? А там не знаю, как Вам
больше нравится ...
- Пусть TC попробует и решает сам. Главное, чтобы надежно работало!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
12.12.2013, 12:16
Цитата Сообщение от Staut Посмотреть сообщение
вроде-бы для гарантии ?
Это просто "замазывание глаз", а не гарантия. Не работать конструкция без амперсанда не может. Проблема была в чем-то другом, наверняка. Гарантия - обеспечить на входе типы, абсолютно идентичные тем, которые там ожидает увидеть компилятор.

Что такое, и чем отличается &ListBoxDblClick от ListBoxDblClick - рассказывать не надо? Какой тип имеет первое выражение, а какой - второе? А что ожидает увидеть на входе компилятор? Какого типа должно быть выражение для присвоения обработчику события OnDblClick?

Цитата Сообщение от Staut Посмотреть сообщение
Пусть TC попробует и решает сам.
Это вредный совет. Попробуй спрыгнуть с 10 этажа, и реши сам, нравится это тебе или нет. Попробуй войти в запой на месяц, а потом решишь, как оно тебе. Попробуй развалить проект стоимостью в несколько миллионов, а потом - реши, как тебе больше нравится писать... Писать надо ПРАВИЛЬНО, а не пробовать разный бред, который больше нравится.

Не по теме:

Мне вообще нравится большая кнопка "Сделать, чтобы все круто работало", но приходится писать код на много мегабайт, чтобы проект действительно стабильно работал.


Так вот, ПРАВИЛЬНО - это без амперсанда. Все остальное - это замазывание каких-то труднообнаружимых ошибок, чтобы заткнуть рот компилятору. Но ошибки все равно вылезут, по закону Мерфи. И потом исправить ее будет гораздо сложнее и дороже, чем сразу не допустить.
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596
12.12.2013, 14:33
- UI, я в общем-то не возражаю против всего, что Вы говорите. Да, компилятор ждет в этом выражении
указателя на функцию. И простое имя функции таковым и является.

-

Не по теме:

Позвольте небольшое лирическое отступление не по теме. Что касается ПРАВИЛЬНОСТИ, то жизнь ее порой просто
не терпит! Я тут работал в одной фирмочке, так когда я говорил своему начальнику, что буду писать все равно
ПРАВИЛЬНО, КАК ПОЛОЖЕНО, а не как попало, то он просто багровел и в конце концов меня выгнал! Сам он в
программировании не понимал ровным счетом ничего. У него все было очень просто: - "нажал две кнопки и все
засияло разноцветными огнями". Так у него в сознании слово ПРАВИЛЬНО навсегда срослось с понятием "пустой траты
времени". Бывает и так, в последние времена все чаще ...



- Не подумайте ради Бога, что я упорствую в своей НЕПРАВИЛЬНОСТИ Сам-же я, конечно, всегда старался делать
ПРАВИЛЬНО и за это, как видите, даже страдал! Не знаю, чего Вы на меня так взъелись. Да и амперсанд я тоже
ставил из этих побуждений. Ведь тот форумчанин, на которого я ссылался выше, божился, что у него без амперсанда
компилятор все жрет без намека и сомнения, а работать обработчик - не работает! ... Может Вы и правы, причина
была совсем в другом.
- Ваш авторитет UI для меня несомненно выше, говорю честно, без иронии. Больше не буду ставить ...
0
29 / 29 / 3
Регистрация: 11.02.2012
Сообщений: 339
12.12.2013, 16:18  [ТС]
Всем огромное спасибо.
Вот эта часть кода меня интересовала, не знал как обратиться, остальное я сделал.

C++
1
TListBox* lbp = (TListBox*)Sender;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2013, 16:18
Помогаю со студенческими работами здесь

Удаление динамически созданных объектов
Помогите плз. Пишу курсач по МИО. Вот ща работаю над интерфейсом. Я по нажатию кнопку создаю динамически объект edit. Хочу теперь при...

Удаление динамически созданных вкладок
Подскажите как сделать? Создаю вкладки по нажатию кнопки void __fastcall TNewProject::CreateClick(TObject *Sender) { static...

Удаление динамически созданных объектов
Приветствую. Вопрос поднимался, но что то не получается! Создаю объекты в цикле PanMap = new TPanel(Panel1); PanMap-&gt;Tag = TagMap;...

События динамически созданных компонентов...
Как создать обработчик события для динамически созданного визуального компонента? TForm *mF; mF = new TForm(Form1); ...

Удаление динамически созданных TSpeedButton
Имеется такой вот код, оптимизации 0, но сейчас не об этом. При попытке удалить массив из But, происходит ошибка. Project...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru