Вы using actions? Если нет, вы должны это рассмотреть.
Add a TActionList
to your application если у вас его еще нет. Затем добавьте к нему TAction
. Задайте свойства действия так, чтобы он напоминал кнопку. (I.e., установите заголовок и переместите обработчик события OnClick
кнопки обработчику .) Назначьте свойство кнопки Action
, чтобы обратиться к новому объекту действия.
И наконец, обработайте событие действия OnUpdate
. В нем активируйте или отключите действие по мере необходимости. Кнопка (и любые другие элементы управления, которые вы позже решили связать с тем же действием) будет updated accordingly.
procedure TSteveForm.ButtonActionUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := (Edit1.Text <> '') and (Edit2.Text <> '');
end;
Это выглядит очень похоже на обработку в OnChange
события управления редактирования, но его различия становятся очевидными, когда сценарий изменения:
- Если добавить или удалить редактирования элементов управления, вы должны изменить только эта одна процедура, чтобы кнопка была включена правильно. Если вы обращаетесь с событиями
OnChange
, вам необходимо изменить процедуру и присвоить ее каждому новому объекту управления OnChange
.
- Не все элементы управления имеют удобное событие
OnChange
, которое позволяет вам узнать, когда что-то изменилось. Действия 'OnUpdate
событий освобождают вас от необходимости точно знать, когда обновление подходит. Они работают, пока программа не работает и по требованию.
Ударьте меня на ответ, прежде чем я смогу вернуться, чтобы отредактировать мою. Upvoted. –