Необходимо включить кнопку при вводе текста в поля редактирования

Я хотел бы использовать 2 элемента TEdit и кнопку для этого. Как я могу проверить, имеют ли все Edit какое-то текстовое значение. После этого я хочу активировать кнопку.

Событие Onshow основной формы: Btn1.Enabled:=false;

если Edit1.text + Edit2.text имеют значение, то btn1.enabled:=true ?

Спасибо за помощь!


person Steve88    schedule 06.02.2015    source источник


Ответы (2)


Вы используете действия? Если нет, вы должны рассмотреть это.

Добавьте TActionList в свое приложение, если у вас его еще нет. Затем добавьте к нему TAction. Установите свойства действия так, чтобы оно напоминало кнопку. (То есть установите заголовок и переместите обработчик события OnClick кнопки в OnExecute действия. обработчик.) Назначьте свойству Action кнопки ссылку на новый объект действия.

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

procedure TSteveForm.ButtonActionUpdate(Sender: TObject);
begin
  TAction(Sender).Enabled := (Edit1.Text <> '') and (Edit2.Text <> '');
end;

Это очень похоже на обработку событий OnChange элементов управления редактированием, но отличия становятся очевидными при изменении сценария:

  1. Если вы добавляете или удаляете элементы управления редактированием, вам нужно изменить только эту одну процедуру, чтобы убедиться, что кнопка включена правильно. Если вы обрабатываете события OnChange, вам нужно изменить процедуру и назначить ее свойству OnChange каждого нового элемента управления.
  2. Не все элементы управления имеют удобное событие OnChange, которое позволяет узнать, когда что-то изменилось. События OnUpdate действий избавляют вас от необходимости точно знать, когда обновление является подходящим. Они запускаются во время простоя программы и по требованию.
person Rob Kennedy    schedule 06.02.2015
comment
Обгони меня до ответа, прежде чем я смогу вернуться, чтобы отредактировать свой. Проголосовал. - person Ken White; 06.02.2015

Используйте событие Edit1.OnChange и настройте его так, чтобы оно также обрабатывало Edit2.OnChange. Код обработчика события прост:

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Btn1.Enabled := (Edit1.Text <> '') and (Edit2.Text <> '');
end;
person Ken White    schedule 06.02.2015
comment
Большое спасибо, ребята! - person Steve88; 06.02.2015
comment
Лично я скорее увижу действия, используемые для этого. Это делает код более декларативным. - person David Heffernan; 06.02.2015