我創建了一個if陳述句,當輸入的代碼與生成的代碼匹配時,我想使用 `ShowMessage() 函式輸出一條訊息。但是,它仍然輸出“做得好!” 即使明顯錯誤的訊息。
按鈕代碼:
procedure TfrmCAPTCHA.btnCheckClick(Sender: TObject);
var
sCode, sAnswer : string;
bRightAnswer, bWrongAnswer : boolean;
begin
{button to verify input}
sANswer := Trim(edtAnswer.Text);
sCode := edtCaptchaCode.Text;
bRightAnswer := (sAnswer = sCode);
bRightAnswer := True;
bWrongAnswer := (sAnswer <> sCode);
bWrongAnswer := False;
if bRightAnswer then
begin
btnCAPTCHAContinue.Show;
Showmessage('Nicely Done, seems you''''re all set to go!' #13
'Press the continue button to collect your codes young wizzling');
end
else begin
edtCAPTCHACode.clear;
edtAnswer.clear;
btnCAPTCHAContinue.Hide;
Showmessage( 'That seems to be the wrong answer, please try again');
end;
end;
uj5u.com熱心網友回復:
那是因為您首先設定bRightAnswer為true/false取決于它是否正確,但是true無論條件如何,您都會立即使用固定值再次覆寫它。下一個塊設定中的相同內容bWrongAnswer為false:
bRightAnswer := (sAnswer = sCode);
bRightAnswer := True; {regardless of what it was before, it's always true now}
bWrongAnswer := (sAnswer <> sCode);
bWrongAnswer := False; {regardless of what it was before, it's always false now}
洗掉這兩行。
您可以通過替換bWrongAnswer := (sAnswer <> sCode);為來進一步簡化代碼bWrongAnswer := not bRightAnswer;,或者更進一步并bWrongAnswer完全洗掉變數,而只是not bRightAnswer在代碼中的任何地方使用。
其實作在看來,bWrongAnswer反正你也用不著,隨便拿掉應該也沒什么壞處。
如果你愿意,你也可以洗掉bRightAnswer和替換的if bRightAnswer then直接if sAnswer = sCode then。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/350462.html
