我目前有一条记录(具有不同的值)和三个具有特定指定值的用户常量(例如名称等)。
我可以将编辑框与一个用户进行比较,如下所示:
if edit1.text = user1
then xxxx
这很好,但是如何指定编辑框必须在三个不同的用户之间进行检查?
示例:
if edit1.text = user1 to user3
then xxxx
我该如何做到这一点?
答案 0 :(得分:8)
Delphi的最新版本(我使用XE)包含单元StrUtils.pas,其中包含
function MatchText(const AText: string; const AValues: array of string): Boolean;
function MatchStr(const AText: string; const AValues: array of string): Boolean;
MatchStr是区分大小写的版本。
现在可以像这样解决您的问题:
if MatchStr(edit1.text, [user1, user2, user3])
then xxxx
答案 1 :(得分:3)
您可以使用AnsiMatchStr()/ AnsiMatchText()来检查字符串是否与数组中的某个字符串匹配。 AnsiIndexStr()/ AnsiIndexText()也返回匹配字符串的索引,因此在 语句的情况下非常有用。
答案 2 :(得分:2)
对于可能在运行时稍后增长的集合,我可能会声明一个TStringList,如果我有一个类实例来保存“可接受的值”并将大if (x=a1) or (x=a2) or (x=a3)....
序列替换为:
// FAcceptableValues is TStringList I set up elsewhere, such as my class constructor.
if FAcceptableValues.IndexOf(x)>=0 then ...
这具有可定制的好处。在你的逻辑的情况下,我会考虑制作一个控件列表,并做一个匹配功能:
var
Users:TList<TUser>;
Edits:TList<TEdit>;
begin
... other stuff like setup of FUsers/FEdits.
if Match(Users,Edits) then ...
匹配可以写成下一个循环的简单:
For U in Users do
for E in Edits do
if U.Text=E.Text then
begin
result := true;
exit
end;
答案 3 :(得分:1)
Delphi不支持在case
语句中使用字符串,所以你必须这么做。
if ((user1.name = edit1.text) and (user1.surname = edit2.text)) or
((user2.name = edit1.text) and (user2.surname = edit2.text)) or
((user3.name = edit1.text) and (user3.surname = edit2.text))
then xxxx