Трябва да активирате бутона, когато текстът е въведен в полетата за редактиране

Бих искал да използвам 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 на Actions ви освобождават от необходимостта да знаете точно кога актуализацията е подходяща. Те се изпълняват, докато програмата е неактивна и при поискване.
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