如何在将按钮的Enable设为False后,让其不再响应其他事件也可以说我希望用户使用程序的时候,点击按钮不要太快,应该如何做吧?
我想到可以在OnClick事件开始将按钮的Enable设为False,然后处理其他事情,处理完后再设为True。以上这些所有操作都放在一个过程中执行。但是当连继的点击时,事件还是照样会触发,我现在就
希望达到一种效果,就是连继点击时在Enable没有被设为True的情况下,他是不触发Click事件的。
请高手给个解决方法.

解决方案 »

  1.   

    加一个Timer,将Timer1.Enabled设置为false,在Button.Click里面激活Timerprocedure TForm1.Button1Click(Sender: TObject);
    begin
      Timer1.Enabled := true;
      Timer1Timer(Timer1);
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if Not(Timer1.Enabled) then Timer1.Enabled := false;
      Button1.Enabled := Not(Button1.Enabled);
    end;
      

  2.   

    如果问题有这简单就好了!你们可以自己测试一下看看啥!虽然设了Fasle ,但是点击的消息还是会响应的,除非把这个消息截获,但这样做也不安全呀!
      

  3.   

    cuteant 呀,你的那种方法看似效果还行,但是怎么还原呢??按照的代码模式,好像还原有点困难咧?
      

  4.   

    Button1.Enabled := Not(Button1.Enabled);不是还原吗?
      

  5.   

    ????我是希望人机交互操作呀??
    点击按钮就不能再点击,直到一个操作完成,如发送数据,到等数据回来这段时间内是不能再点击的。下一次的点击并不是靠Timer来控制的,要人为的操作,反正我是不知道用户什么时候会点击这个按钮的!
      

  6.   

    我的意思是,我这里是让Timer第一次启动的时候禁止Button1,等Timer下次进入Timer1Timer的时候恢复Button1,所以写了Button1.Enabled := Not(Button1.Enabled)也就是说,我这里恢复是根据Timer设置的时间来的至于你说的,等数据回来,那你知道数据什么时候回来吗?
      

  7.   

    设一个全局bool变量,点击事件里先判断true再运行,运行时设为false,运行完再设为true
      

  8.   

    不好意思,我搞定了,在使能按钮之前清空所有消息。Application.ProcessMessages,就这一句就OK了!哈哈,False后。谢谢大家了!
      

  9.   

    var
     i,j : integer;i := GetTickCount;
    j := GetTickCount;
    if j-i < 1000 then
     message("操作过快");