Powered by Invision Power Board


  Ответ в темуСоздание новой темыСоздание опроса

> Delphi: Один обработчик на несколько обьектов
Bloody Eagle
Дата 20.03.2009 - 16:08
Цитировать сообщение

Пользователя сейчас нет на форуме

Злобный Админ
Group Icon
Профиль
Сообщений: 4 032

В различных программах часто встречаются ситуации, когда на несколько разных обьектов нужно навесить практически одинаковые обработчики событий. Ярким примером тому может служить следующая программа (на ее основе можно сделать калькулятор).

Итак, задача:
Цитата
Написать программу, которая при нажатии на любую кнопку в поле ввода будет писать то, что написано на кнопке


Очень часто даже те, кто программирует не первый год пытаются решить такую задачу "в лоб", навешивая на каждую кнопку по обработчику. Выглядит это примерно следующим образом:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
   Edit1.Text := Edit1.Text + Button1.Caption;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Edit1.Text := Edit1.Text + Button2.Caption;
end;
.
.
.

Такое решение не может считаться приемлемым, и по моему его нельзя считать даже правильным, т.к. таким решением вы просто перечеркиваете всю парадигму обьектно-ориентированного программирования.
А правильное решение очень простое.
Дело в том, что в каждый обработчик события передается ссылка(указатель) на обьект, от которого это событие пришло. Обратите внимание, что каждый обработчик имеет параметр Sender типа TObject - это и есть тот самый указатель на обьект, сгенерировавший событие. Так что нам остается только привести его к нужному типу и вуаля - мы имеем доступ ко всем свойствам обьекта:
Код
procedure TForm1.ButtonClick(Sender: TObject);
begin
   Edit1.Text := Edit1.Text + (Sender as TButton).Caption;
end;

После этого мы можем назначить этот обработчик на все кнопки, и все это будет работать.


--------------------
Не нарушай правилаuser posted image ->3 предупрежденияuser posted image -> Банuser posted image
Доступность моей аси на форуме не повод стучаться туда по всяким мелочам
PMПисьмо на e-mail пользователюICQ
Top
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса

 

[AD]