具有两个变量delphi的嵌套If else条件

时间:2019-02-06 21:08:40

标签: delphi

取决于两个变量,我想在一个模板生成器中显示不同的文本框,我假设它基于Delphi。

对文本框的选择将取决于接收者所在的国家(AVX ['M_COUNTRYC'])和文章类别(artcategory)。 至少有四个类别,分别名为“ Lizenz”,“ Digifit”,“硬件”和“附件”。

我想产生以下结果:

  • 选项1:国家为D->出现默认文本框(DBMemoSchlusstext)
  • 选项2:国家/地区不是D而不是CH,并且其中至少一个类别是硬件或附件->出现文本框HardEU
  • 选项3:国家/地区不是D,并且所有项目都没有类别“硬件或附件”->出现文本框LizNotDE
  • 选项4:国家/地区不是D,而是CH,并且其中至少一个类别是“硬件或附件”->出现文本框HardNotEU

我已经尝试了不同的方法,但是没有一个起作用:

方法1:

if not (AVX['M_COUNTRYC'] = 'D') then begin
   if (AVX['M_COUNTRYC'] = 'CH') and (AVX['P_ARTCATEGORY'] = 'Lizenz') or (AVX['P_ARTCATEGORY'] = 'DIGIFIT') then begin
      DBMemoSchlusstext.visible := false;
      LizNotDE.visible := true;
   end
   else if (AVX['M_COUNTRYC'] = 'CH') and (AVX['P_ARTCATEGORY'] <> 'Lizenz') and (AVX['P_ARTCATEGORY'] <> 'DIGIFIT') then begin
      DBMemoSchlusstext.visible := false;
      HardNotEU.visible := true;
   end
   else if (AVX['M_COUNTRYC'] <> 'CH') and (AVX['P_ARTCATEGORY'] = 'Lizenz') or (AVX['P_ARTCATEGORY'] = 'DIGIFIT') then begin
      DBMemoSchlusstext.visible := false;
      LizNotDE.visible := true;
   end
   else if (AVX['M_COUNTRYC'] <> 'CH') and (AVX['P_ARTCATEGORY'] <> 'Lizenz') and (AVX['P_ARTCATEGORY'] <> 'DIGIFIT') then begin
      DBMemoSchlusstext.visible := false;
      HardEU.visible := true;
   end;
end else begin
   DBMemoSchlusstext.visible := true;
end;
end;

方法2:

if (AVX['M_COUNTRYC'] = 'D') then DBMemoSchlusstext.visible := true;
else if (AVX['P_ARTCATEGORY'] = 'Lizenz') and (AVX['P_ARTCATEGORY'] <> 'Hardware') then LizNotDE.visible := true;
    else if (AVX['M_COUNTRYC'] = 'CH') then HardNotEU.visible := true;
        else HardEU.visible := true;
end;

提前感谢任何提示或建议

2 个答案:

答案 0 :(得分:3)

为了更好地理解,我在条件和输出中使用了简短的变量,因此您必须将其替换为实际的代码项:

var
  option: 1..4;
begin
  if isD then option := 1
  else if isHardware or isAccessories then
    if isCH then option := 4
    else option := 2
  else option := 3;

  Default := (option = 1);
  HardEU := (option = 2);
  LizNotDE := (option = 3);
  HardNotEU := (option = 4);
end;

答案 1 :(得分:0)

谢谢大家的帮助。这是新代码:

DBMemoSchlusstext.visible := false;
HardNotEU.visible := false;
HardEU.visible := false;
LizNotDE.visible := false;

if (AVX['M_COUNTRYC'] = 'D') then begin DBMemoSchlusstext.visible := true; end
else if ((AVX['P_ARTCATEGORY'] = 'Smartfit Hardware') or (AVX['P_ARTCATEGORY'] = 'Smartfit Zubehör')) then begin
    if (AVX['M_COUNTRYC'] = 'CH') then begin HardNotEU.visible := true; end
    else begin HardEU.visible := true; end
else begin LizNotDE.visible := true; end;
end;

这似乎不是完全错误,但是最后一条语句else begin LizNotDE.visible := true; end;永远不会显示。我不确定括号和分号。

进一步使用的程序似乎只考虑了文章列表中的最后一篇文章。