Есть ли способ использовать одну процедуру для нескольких кнопок в Паскале?

Я ищу способ использовать одну процедуру для нескольких кнопок. Это для теста, как вы должны нажать кнопку 1 для вопроса 1, но скопировать и вставить весь код для 36 кнопок и изменить переменные для 36 кнопок не очень интересно для всех.

Поэтому я подумал, что что-то вроде этого будет возможно:

procedure TForm1.Button[x]Click(Sender: TObject);
begin
  DoTask[x];
end;

Х является переменной.

Возможно ли что-то подобное или есть другие способы получить тот же результат?

1 ответ

Решение

Самый простой способ сделать это:

  1. Пронумеруйте кнопки, используя Tag свойство в Инспекторе объектов (или в коде, когда они создаются), чтобы легко отличать их друг от друга. (Или назначьте значение, которое вы хотите передать вашей процедуре / функции при нажатии этой кнопки.)

  2. Создайте один обработчик событий и назначьте его всем кнопкам, которые вы хотите обрабатывать одним и тем же кодом.

  3. Sender Параметр, который получает событие, будет кнопкой, по которой вы нажали, и которую затем вы можете TButton,

    procedure TForm1.ButtonsClick(Sender: TObject);
    var
      TheButton: TButton;
    begin
      TheButton := Sender as TButton;
      DoTask(TheButton.Tag);
    end;
    
Другие вопросы по тегам