【问题标题】:How to create multiple conditions in Case command?如何在 Case 命令中创建多个条件?
【发布时间】:2019-04-16 17:42:53
【问题描述】:

例如:

var
 Msg: Cardinal;
case Msg of
      WM_CHAR:
      WM_KEYDOWN:
      WM_KEYUP:
        begin
         // Do something
        end;

    end;

【问题讨论】:

  • 你试过什么?它表现出什么错误/行为?你想完成什么?
  • @mirtheil,错误出现在WM_KEYDOWN: 上,上面写着:“预期 END 但收到了 : "。
  • 我只想说,如果您阅读了文档,您之前的任何问题(包括此问题)都不会在这里找到位置,只需阅读文档,大部分都会得到解答,当您到达时等级然后来这里问。
  • 为了您的方便,这里是docwiki.embarcadero.com/RADStudio/Tokyo/en/…

标签: delphi switch-statement delphi-10-seattle


【解决方案1】:

使用逗号分隔标签:

var
  Msg: Cardinal;
... 
case Msg of
  WM_CHAR,
  WM_KEYDOWN,
  WM_KEYUP:
    begin
      // Do something
    end;
end;

正如@SertacAkyuz 提到的,如果值是连续的,您可以执行以下操作:

case Msg of
  WM_KEYDOWN .. WM_CHAR: // range 
    begin
      // Do something
    end;
end;

【讨论】:

  • Sertac:是的,确实如此,尽管我可能不会将它用于此类消息常量。如果你知道确切的顺序,它可以工作,但我不知道(也不想记住它们)。
  • 是的,在这种情况下,它只会使常量变得模糊。但是很高兴知道它何时有意义,例如:wm_keyfirst .. wm_keylast。
【解决方案2】:

假设您希望在所有三种情况下都执行“做某事”,您必须用逗号分隔案例标签:

var
  Msg: Cardinal;

case Msg of
  WM_CHAR,
  WM_KEYDOWN,
  WM_KEYUP:
        begin
         // Do something
        end;
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多