Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить объект, вызвавший событие, мне стыдно, но я не знаю 
V
    Опции темы
UniBomb
Дата 17.2.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



Добрый день. На форме есть несколько одинаковых контролов (например TButton), которые по сути делают одно и тоже, но с разными объектами. Логичней и короче присвоить всем контролам один и тот же обработчик события (ну пусть это будет обработчик по нажатию этого TButton). Так вот, никак не могу понять - как же мне определить какую именно кнопку наэали. 

Пробовал делать так - в кажой кнопке свойство Tag  я ставил какое-то своё число, и при входе в обработчик я делал что-то типа:
Код

switch((TButton)Sender->Tag)
 { 
   case 1; /*...*/ break;
   case 2; /*...*/ break;
   case 3; /*...*/ break;
   case 4; /*...*/ break;
   /*...*/
   default: /*...*/ break;
 }



Естественно запись "(TButton)Sender->Tag" неправильна, но я помню, что когда то именно через Tag и делал подобное, но вот как точно вспомнить немогу. Так что я нид хелп  smile .
PM MAIL ICQ Skype   Вверх
Lazin
Дата 17.2.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



Код

TButton* btn = dynamic_cast<TButton*>(Sender);
if (btn)
{
    btn->blablabla....
}
else
{
   error_log("blablabla");
}


Добавлено через 2 минуты
dynamic_cast вернет 0, если Sender не кнопка(TButton)
PM MAIL Skype GTalk   Вверх
UniBomb
Дата 17.2.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



Цитата(UniBomb @  17.2.2009,  10:47 Найти цитируемый пост)
(TButton)Sender->Tag

Это я опечатался. Я имел в виду "(TButton*)Sender->Tag", мы указатель приводим к классу кнопки.


Lazin, не, ты чуть-чуть непонял. Обработчик события по нажатию кнопки общий только для конопок, поэтому dynamic_cast "0" никогда не вернёт. Мне нужно отследить какая именно кнопка была нажата.
PM MAIL ICQ Skype   Вверх
Dem_max
Дата 17.2.2009, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Я для менюшки так делал, аналогию проведи и сделай для кнопок
Код

   TMenuItem *ClickedItem = dynamic_cast<TMenuItem *>(Sender);
   if (ClickedItem)
   {
      switch(ClickedItem->Tag)
      {
         case 0: break;
         case 1: break;
         case 2: break;
      }
   }




--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
UniBomb
Дата 17.2.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



Lazin, сорри, это я тебя недопонял  smile 


Lazin, Dem_max, спасибо, всё супер))
PM MAIL ICQ Skype   Вверх
Lazin
Дата 17.2.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



Цитата(UniBomb @  17.2.2009,  11:18 Найти цитируемый пост)
Lazin, не, ты чуть-чуть непонял. Обработчик события по нажатию кнопки общий только для конопок, поэтому dynamic_cast "0" никогда не вернёт. Мне нужно отследить какая именно кнопка была нажата. 

по тэгам-же, либо еще проще
Код

TButton* btn = dynamic_cast<TButton*>(Sender);
if (btn)
{
    if (btn == btnMyFirstButton)...
    else if (btn == btnMySecondButton)...
    ...
}
else
{
   error_log("blablabla");
}

PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.