Вопрос № 139823: Здравствуйте!
У меня в с++ билдере 6 в программе есть несколько кнопок. Они называются Button1, Button2, ... Могу ли я по числу N обратится к кнопке ButtonN ?
Спасибо. ...
Вопрос № 139.823
Здравствуйте!
У меня в с++ билдере 6 в программе есть несколько кнопок. Они называются Button1, Button2, ... Могу ли я по числу N обратится к кнопке ButtonN ?
Спасибо.
Отправлен: 11.07.2008, 17:41
Вопрос задал: Asteriks (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Fenixk19
Здравствуйте, Asteriks!
Не очень красивое решение, но другого не знаю: можно создать массив указателей на элемент типа кнопка и скопировать соответсвенно значения указателей в массив, а потом просто обращаться к ним по индексу. Подозреваю, что в борланде предусматрели более элегантное решение.
Приложение:
Ответ отправил: Fenixk19 (статус: 3-ий класс)
Ответ отправлен: 11.07.2008, 18:04 Оценка за ответ: 5 Комментарий оценки: Спасибо
Отвечает: Dr_Andrew
Здравствуйте, Asteriks!
Действительно, в Borland C++ Builder имеется более изящное решение. Щелчок по кнопке вызывает событие OnClick, которое обрабатывается в функции, принимающей в качестве аргумента указатель на объект, который это событие (щелчок) вызвал - TObject* Sender. Для получения доступа к свойствам этого объекта, нужно прямо указать, что это кнопка, выполнив приведение типов:
(TButton*)Sender
Допустим, у нас есть форма, на которой три кнопки: Button1, Button2 и Button3. Присвоим свойству Tag каждой кнопки значение 1, 2 или 3, соответственно. Реализуем обработчик события OnClick для первой кнопки (см. приложение).
В этом обработчике переменной i присваивается номер тега текущей (вызывающей событие OnClick) кнопки: int i = ((TButton*)Sender)->Tag;
После этого в качестве обработчика события OnClick каждой из последующих кнопок назначьте обработчик щелчка по первой кнопке - Button1Click (воспользуйтесь выпадающим списком реализованных обработчиков на вкладке Events инспектора объектов (Object Inspector).
P.S. С помощью кнострукции ((TButton*)Sender)-> можно получить доступ к любому свойству текущей (щёлкнутой) кнопки. Например, дополните обработчик, приведённый в приложении, следующей строкой и посмотрите, что получится:
((TButton*)Sender)->Caption = "Щёлкнуто!";
Удачи!
Приложение:
Ответ отправил: Dr_Andrew (статус: Студент)
Ответ отправлен: 12.07.2008, 13:40 Оценка за ответ: 5 Комментарий оценки: Спасибо!