В конечном итоге вы спрашиваете, как сообщить функции ViewComments
, с какими свойствами кнопки она работает.
Вы понимаете, что делает параметр Sender
в событии OnClick
? Он сообщает обработчику событий, какое событие объекта обрабатывается. Он выполняет именно ту роль, которую вы хотите отнести к функции ViewComments
.
Вот что Мейсон понял в своем ответе. Вместо того, чтобы передавать все значения свойств, передайте сам объект :
procedure ViewComments(CommentButton: TCustomSpeedButton);
Затем вызовите его из обработчиков событий всех ваших кнопок:
procedure TForm1.CustomSpeedButton1Click(Sender: TObject);
begin
ViewComments(CustomSpeedButton1);
end;
procedure TForm1.CustomSpeedButton2Click(Sender: TObject);
begin
ViewComments(CustomSpeedButton2);
end;
Без строк, без case
операторов, без поиска.
Это должно ответить на ваш вопрос, но вы можете сделать это еще лучше. Помните, что я говорил ранее о параметре Sender
? Когда кто-то нажимает первую кнопку, параметр Sender
этого обработчика OnClick
будет кнопкой, поэтому мы можем переписать первый обработчик события следующим образом:
procedure TForm1.CustomSpeedButton1Click(Sender: TObject);
begin
ViewComments(Sender as TCustomSpeedButton);
end;
И вы можете переписать второй обработчик событий следующим образом:
procedure TForm1.CustomSpeedButton2Click(Sender: TObject);
begin
ViewComments(Sender as TCustomSpeedButton);
end;
Хм. Они одинаковые. Наличие двух одинаковых функций расточительно, поэтому избавьтесь от одной и переименуйте другую, чтобы она не звучала в зависимости от кнопки:
procedure TForm1.CommentButtonClick(Sender: TObject);
begin
ViewComments(Sender as TCustomSpeedButton);
end;
Затем задайте OnClick
свойства обеих кнопок для обращения к этому одному обработчику событий. Вы не можете сделать это, просто дважды щелкнув свойство в инспекторе объектов. Вам нужно будет либо ввести имя самостоятельно, выбрать его из выпадающего списка или назначить свойство события во время выполнения:
CustomSpeedButton1.OnClick := CommentButtonClick;
CustomSpeedButton2.OnClick := CommentButtonClick;
Я также хотел бы призвать вас использовать более значимые имена для ваших элементов управления. Это Label15
особенно вопиюще. Как вы можете помнить, что метка пятнадцатый указывает на то, что редактирование выполняется? Назовите это EditInProgressLabel
, например.