Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамические кнопки

436
01 марта 2006 года
Fevzi
87 / / 02.04.2005
Создаю динамически 10 кнопок и всего лишь одну фун-ию для обработки событий нажатия на эти кнопки.Как фун-ия обработки должна узнавать какая именно из 10 кнопок была нажата, вообщем какая из кнопок заставила сработать обработчик?
7.9K
01 марта 2006 года
uki_
122 / / 26.01.2006
присвой Tag свойству кнопок разное значение.
Или же можно определить по Caption. Т.е.
 
Код:
void __fastcall TForm1::ButtonClick(TObject *Sender)
{
  if(((TButton *)Sender)->Tag == 1)
  ... или
  if(((TButton *)Sender)->Caption == "...")
  ...
}
294
02 марта 2006 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by uki_
присвой Tag свойству кнопок разное значение.
Или же можно определить по Caption. Т.е.
 
Код:
void __fastcall TForm1::ButtonClick(TObject *Sender)
{
  if(((TButton *)Sender)->Tag == 1)
  ... или
  if(((TButton *)Sender)->Caption == "...")
  ...
}


Свойство Tag, судя по хелпу Билдера, введено именно для подобных целей. Но, имхо, приводить к типу вот так:

 
Код:
((TButton *)Sender)->Tag
некорректно.
Надо, имхо, так:
Код:
TButton *btn = dynamic_cast<TButton*>(Sender);
if(btn)
{
    switch(btn->Tag)
    {
        case 1:
            /* ... */
            break;
        case 2:
            /* ... */
            break;
        default:
            /* ... */
            break;
    }
}
7.9K
02 марта 2006 года
uki_
122 / / 26.01.2006
Цитата:
Originally posted by Plisteron
Свойство Tag, судя по хелпу Билдера, введено именно для подобных целей. Но, имхо, приводить к типу вот так:
 
Код:
((TButton *)Sender)->Tag
некорректно.
Надо, имхо, так:
Код:
TButton *btn = dynamic_cast<TButton*>(Sender);
if(btn)
{
    switch(btn->Tag)
    {
        case 1:
            /* ... */
            break;
        case 2:
            /* ... */
            break;
        default:
            /* ... */
            break;
    }
}


А если только две кнопки, твое imho, o Generalissimus, что подсказывает???? :)

294
02 марта 2006 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by uki_
А если только две кнопки, твое imho, o Generalissimus, что подсказывает???? :)


То же самое, что и с 10.
Одной кнопке делаешь Button1->Tag = 1;
Другой Button2->Tag = 2;
Дальше как в вышенаписанном коде.

Это если, конечно, они динамически создаются. А если статически, то мудрить не надо, а создать для каждой отдельную функцию-обработчик события.

ЗЫ. Я просто генерал, потому как на портрете не Сталин, а Аугусто Пиночет. :)

7.9K
02 марта 2006 года
uki_
122 / / 26.01.2006
Цитата:
Originally posted by Plisteron
То же самое, что и с 10.
Одной кнопке делаешь Button1->Tag = 1;
Другой Button2->Tag = 2;
Дальше как в вышенаписанном коде.

Я имел в виду, что когда случаев только два, тогда обычно case не используют.

Цитата:
ЗЫ. Я просто генерал, потому как на портрете не Сталин, а Аугусто Пиночет. :)

Перепутать Пиночет с Сталином:???:
Обижаете коллега, точнее mon g&#233;n&#233;ral.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог