Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463
1

Обращение к кнопкам

04.11.2016, 01:08. Показов 1805. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим есть большая программа, в ней 3 кнопки в каждой почти весь текст одинаковый. Хочу сделать функцию knopki(int i). И суть такая. i-это номер кнопки, задётся при нажатии кнопок, так вот, как мне с помощью этой переменной обращаться к Bitton1 Button2 Button3(вместо 1 2 3 должен быть i)
Что-то типо такого
C++
1
2
3
void knopki(int i){
Buttoni->......
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2016, 01:08
Ответы с готовыми решениями:

Обращение к кнопкам MessageBox
Доброго времени суток! Хотел бы спросить, как обратиться к кнопкам MessageBox. Если можно, то со...

Обращение к кнопкам через функцию
Я новичок, потому заранее прошу сильно не кидаться тапками. Такая проблема, создаю морской бой, ну,...

Обращение к динамически созданым кнопкам
Есть поле из кнопок, созданных по двумерной матрице. Как к ним обратиться и возможно ли сделать...

Обращение из обработчика к кнопкам созданным в разметке
Всем привет. Нужна помощь. Есть задача: на экране при нажатии на кнопку "Добавить" -...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
04.11.2016, 08:38 2
В поиске по форуму вбей FindComponent, надоело одно и то же 5000 раз писать, сколько можно?
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
08.11.2016, 18:31 3
Цитата Сообщение от Александр321321 Посмотреть сообщение
Хочу сделать функцию knopki(int i). И суть такая
Попробуйте описать подробнее, что хотите реализовать? В событии нажатия кнопки, содержится указатель на объект (кнопку которая была нажата). Следовательно, зная его можно выполнить определенные действия в одном обработчике. Например, по тегу (у Вас это номер кнопки), или путем преобразования к указателю на кнопку выполнить действия с нею.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::ButtonsClick(TObject *Sender)
{
  switch(((TComponent *) Sender)->Tag)
  {
    case 1:  // действие 1
             ShowMessage("Нажата кнопка 1");
             break;
 
    case 2:  // действие 2
             ShowMessage("Нажата кнопка 2");
             break;
    default: // действие по умолчанию
             ((TButton *) Sender)->Caption="Я нажата";
             break;
  }
}
Добавлено через 1 минуту
Цитата Сообщение от volvo Посмотреть сообщение
В поиске по форуму вбей FindComponent, надоело одно и то же 5000 раз писать, сколько можно?
Достойный ответ модератора. Мало того что не помогли, так еще и отправили не по адресу. Иногда, если не знаешь что сказать по теме, так лучше промолчать.
1
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
08.11.2016, 18:41 4
К совету dstar добавлю: Я бы создавала кнопки динамически, и при создании их затолкала в TObjectList.
Получается массив нужных кнопок, к которому и можно обращаться по индексу.

Ну или что-то вроде такого:
C++
1
2
3
4
5
void knopki(int i){
 for(int j=0;j<ControlsCount && i;j++)
  if(typeid(Controls[j])==typeid(TButton)) i--;
 if(!i) ((TButton*) Controls[j]) -> ...
}
Т.е. Перебрать контролы до нужной по номеру кнопки что менее надежно чем первый вариант

Добавлено через 1 минуту
Цитата Сообщение от volvo Посмотреть сообщение
надоело одно и то же 5000 раз
Я конечно понимаю что модератор - это святое, но... ты не пробовал просто мимо проходить, чтоб не изливать свою злость на других?
Модераторам: Извините за реплику, просто слишком часто от volvo такое хамство замечаю.
2
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463
08.11.2016, 21:00  [ТС] 5
Уже давно реализовал с помощью FindComponent. Спасибо за ответы

Добавлено через 2 минуты
Цитата Сообщение от dstar Посмотреть сообщение
отправили не по адресу
А что в данном случае неправильно? Просто я реализовал, благо всё работает. Пол курсача на этом держится)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
08.11.2016, 21:17 6
Цитата Сообщение от Александр321321 Посмотреть сообщение
А что в данном случае неправильно?
Все правильно. Не обращай внимания на выскочек, которым лишь бы запутать. Всю жизнь работали через
C++
1
TButton *btn = static_cast<TButton*>(FindComponent(String().sprintf(_T("Button%d"), i)));
, все прекрасно работает.

Цитата Сообщение от dstar Посмотреть сообщение
Мало того что не помогли
Ты, можно подумать, помог. Тебя не просили определять, что было нажато. Просили, имея порядковый номер кнопки, получить к ней доступ. А то, что ты привел - это так, "с коленки", и не о том вообще. Так что все правильно я написал.

Цитата Сообщение от Hikari Посмотреть сообщение
Ты не пробовал просто мимо проходить
Я как-нибудь сам разберусь, куда мне проходить а куда - нет. Никакой злости здесь и в помине не было, хамства тоже.
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
08.11.2016, 22:51 7
Цитата Сообщение от volvo Посмотреть сообщение
Всю жизнь работали через
А потом ПО падает на AV и пользователь удивляется "почему".
Цитата Сообщение от Александр321321 Посмотреть сообщение
А что в данном случае неправильно?
Изменишь наименование кнопки - и код станет работать не так как нужно.
Бывает такое, что в проекте около сотни кнопок. Забыл разработчик что FindComponent использует, или не знал что его напарник это сделал, и поменял имя кнопки как ему нужно. В результате твой код просто ее не найдет.
Поэтому дабы избежать такое кнопки оформляют в массив, к которому и обращаются.
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
09.11.2016, 00:41 8
Цитата Сообщение от volvo Посмотреть сообщение
Все правильно. Не обращай внимания на выскочек, которым лишь бы запутать. Всю жизнь работали через
В данном случае неверна изначальная реализация. Использование FindComponent, это практически как использование goto. Код и без этого можно сделать проще. Вы можете работать всю жизни как угодно, но не противоречьте себе, когда Вы же в следующем посте скажете что Ваш код испоганили. Отправить к ссылке или сами найдете?
Цитата Сообщение от Александр321321 Посмотреть сообщение
А что в данном случае неправильно? Просто я реализовал, благо всё работает. Пол курсача на этом держится)
Задачу можно решить множеством способов, но так как у Вас было сказано следующее
Цитата Сообщение от Александр321321 Посмотреть сообщение
в ней 3 кнопки в каждой почти весь текст одинаковый
, то я больше чем уверен, что Вы изначально неверно описали обработчики событий для кнопок. Поэтому и предложил Вам изложить, то что Вы хотели бы сделать. Однако если Вас страивает данный код, предложенное решение, то выбор за Вами. Здесь или учиться правильно программировать сразу или потом подставлять костыли в свой код. Пока же Ваше решение чревато появлением ошибок и плохой читаемости.
Цитата Сообщение от volvo Посмотреть сообщение
Ты, можно подумать, помог. Тебя не просили определять, что было нажато.
Модератор, можно немного уважения в Ваших сообщениях? Вас это совсем не красит. Я с Вами пиво не пил и не собираюсь. Вы не священная корова, и то как Вы пренебрежительно обращаетесь к другим (я не о себе. стерплю) может быть отправлено с жалобой в инстанции выше. Перечитайте правила форума п.3.1 и особенно п.6.4, раз уж Вы взяли на себя такие обязательства.
0
09.11.2016, 00:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2016, 00:41
Помогаю со студенческими работами здесь

Обращение ко всем кнопкам на странице документа Word
На странице Word документа есть около 10 кнопок. Как мне с помощью VBA обратиться ко всем этим...

Запретить прямое обращение к скрипту, но разрешить обращение через RewriteEngine
основной файл у меня index.php и в нем уже определяется какой файл подключить, к примеру ...

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

переход по кнопкам
здравствуйте, подскажите пожалуйста, у меня десять кнопок RadioButton, подписаны (несколько из них)...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru