2014-12-24 14 views
0

這裏是我的程序前檢查:修改循環,以確保所有箱子出發

procedure TfrmGetFunction.btnAddFunctionClick(Sender: TObject); 
    var 
    i : integer; // Loop counter. 
    IsValid : boolean; 
    begin 
    IsValid := true; 
    repeat 
     for i := 1 to 7 do 
     begin 
      if not CoefficientIsValid(CoefficientEdit[i].CoEditBox.Text) then 
      IsValid := false; 
     end; 
     frmGetFunction.Visible := true; 
    until IsValid; 
    frmGetFunction.Visible := false; 
    end; 

這使可見的形式,直到輸入有效。此時,表單不可見,並且調用OnHide來調用下一個過程。

我遇到的問題是,這將隱藏表單,如果任何輸入有效,我只希望它隱藏在ALL投入是有效的。我如何修改我的代碼來做到這一點?

回答

2

如果IsValid仍然是True,則for循環終止時,刪除重複循環並僅隱藏表格。不要引用全局表單變量。相反,你應該使用Self。這當然可以省略。

procedure TfrmGetFunction.btnAddFunctionClick(Sender: TObject); 
var 
    i : integer; 
    IsValid : boolean; 
begin 
    IsValid := true; 
    for i := 1 to 7 do begin 
    if not CoefficientIsValid(CoefficientEdit[i].CoEditBox.Text) then 
     IsValid := false; 
    end; 
    end; 
    Visible := not IsValid; 
end; 

FWIW它可能是更地道使用HideShow爲手段,以改變窗體的知名度。

+0

親愛的,當然IsValid會在輸入發生變化時切換到true和false,因爲每個輸入框都會被檢查? – Gigabit

+0

如果一個或多個輸入無效,IsValid將被設置爲False。 –

+0

知道了:)現在我該如何通知用戶一個或多個輸入框無效,如果有的話哪些是無效的? – Gigabit

0

哦,哦,哦...爲什麼人們爲如此簡單的任務嘗試如此複雜的方式?

var 
    HasInvalids: boolean; 
begin 
    HasInvalids := false; 
    for i := 1 to 7 do 
    HasInvalids := HasInvalids or not CoeffIsValid(...); 
    Visible := HasInvalids; 
end; 

順便說一句,它沒有提供信息。至少,我會嘗試類似於

var 
    HasInvalids, IsValid: boolean; 
const 
    Colors: array[boolean] of TColor = (clRed, clWindow); 
begin 
    HasInvalids := false; 
    for i := 1 to 7 do 
    begin 
    IsValid := CoeffIsValid(...); 
    HasInvalids := HasInvalids or not IsValid; 
    Edits[i].Color := Colors[IsValid]; 
    end; 
    Visible := HasInvalids; 
end; 
相關問題