2015-02-06 4 views
0

2 개의 TEdit 항목과 버튼을 사용하고 싶습니다. 모든 편집에 텍스트 값이 있는지 확인할 수 있습니까? 그 후 버튼을 활성화하고 싶습니다.입력란에 텍스트를 입력 할 때 버튼을 활성화해야합니다.

주 양식 Onshow 이벤트 : Btn1.Enabled : = false;

Edit1.text + Edit2.text에 값이있는 경우 btn1.enabled : = true?

도움 주셔서 감사합니다.

답변

7

using actions? 그렇지 않은 경우 고려해야합니다.

Add a TActionList to your application 아직 가지고 있지 않다면 그런 다음 TAction을 추가하십시오. 버튼과 비슷하게 동작의 속성을 설정합니다. (즉, 캡션을 설정하고 버튼의 OnClick 이벤트 핸들러를 액션의 OnExecute 핸들러로 이동하십시오.) 버튼의 Action 속성을 지정하여 새 액션 객체를 참조하십시오.

마지막으로 작업의 OnUpdate 이벤트를 처리하십시오. 이 항목에서 필요에 따라 작업을 활성화 또는 비활성화합니다. 버튼 (및 나중에 동일한 작업과 연결하도록 선택한 다른 컨트롤)은 updated accordingly이됩니다.

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

이는 편집 컨트롤의 OnChange 이벤트 처리와 매우 비슷하지만, 시나리오가 변경 될 때 그 차이가 명확하게 : 추가하거나 편집 컨트롤을 제거 할 경우에만 변경해야

  1. 단추를 올바르게 사용할 수 있도록하는이 절차. OnChange 이벤트를 처리하는 경우 프로 시저를 각 새 컨트롤의 OnChange 속성에 할당해야합니다.
  2. 모든 컨트롤에는 변경된 사항을 알 수있는 편리한 OnChange 이벤트가 있습니다. 액션의 OnUpdate 이벤트는 업데이트가 적절한시기를 정확하게 알지 못하게합니다. 프로그램이 유휴 상태이고 요구가있을 때 실행됩니다.
+0

내가 편집을 시작하기 전에 대답 해주세요. Upvoted. –

3

Edit1.OnChange 이벤트를 사용하고 Edit2.OnChange도 처리하도록 설정하십시오. 이벤트 처리기 코드는 간단합니다.

procedure TForm1.Edit1Change(Sender: TObject); 
begin 
    Btn1.Enabled := (Edit1.Text <> '') and (Edit2.Text <> ''); 
end; 
+0

대단히 감사합니다! – Steve88

+0

개인적으로 나는 이것을 위해 사용 된 행동을 더 빨리 보았습니다. 코드를 더 선언적으로 만듭니다. –

관련 문제