仅显示一次消息

2 delphi listbox timer

以下代码位于OnTimer事件中.如果2个列表框中的项目不匹配 - ShowMessage.我只需要显示一次消息,但由于计时器正在运行,因此消息会在计时器的设置间隔内弹出.我尝试在ShowMessage行之后禁用计时器,但后来甚至会显示该消息.

for i := 0 to ListBox2.Items.Count - 1 do begin
  p := ListBox1.Items.IndexOf(ListBox2.Items[i]);
  if p = -1 then
    ShowMessage('not matching');
end;
Run Code Online (Sandbox Code Playgroud)

谢谢.

Don*_*son 5

我怀疑你所做的是在消息框之后输入enabled:= false.在消息框之前放置enabled:= false,它应该工作:

var
  i : integer;
  p : integer;

begin

  for i := 0 to ListBox2.Items.Count - 1 do begin
    p := ListBox1.Items.IndexOf(ListBox2.Items[i]);
    if p = -1 then begin
      timer1.Enabled := false;
      ShowMessage('not matching');
      break;
    end;
  end;
Run Code Online (Sandbox Code Playgroud)

最好的问候,不要

  • 切换顺序的原因是当`ShowMessage`处于活动状态(或程序处于任何其他模态状态)时,处理消息,因此OS继续向线程的消息队列添加新的`wm_Timer`消息. (2认同)