ボタンを2回連続でクリックされた時に1回だけ実行するには?

解決


Lupin3rd  2002-10-03 20:11:04  No: 1630

通常、ボタンを一度クリックしてそのボタンはDisableに一度し、Disable中にもう一度ボタンを押すとその処理が終わってから、もう一度処理が実行されます。
Disable中に押されたクリックに関しては無効にしたいのですがどうすればいいでしょうか?お願いします。


hatena  2002-10-03 20:46:11  No: 1631

Enable = False のボタンをクリックして、クリックイベントが起きる
ということはないと思うのですが、、、、
それ以外のことが原因ではないでしょうか。
よろしかったら、どんなコードなのか挙げてもらえますか。


Lupin3rd  2002-10-03 21:40:02  No: 1632

ソースを添付します。お願いします。

Button1.Enabled := False
try

   {時間のかかる処理(過程をプログレスバーで表示)}

finally
   Button1.Enabled := True;
end;


hatena  2002-10-03 22:25:34  No: 1633

おかしいですね。こちらで下記のコードで試してみたけど、
Disable中にどれだけクリックしても2度イベントが起きること
はなかったですけど。(Win98 + Del6Per)

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  TButton(Sender).Enabled := False;
  for i := 0 to 20 do
  begin
    Sleep(100);
    Application.ProcessMessages;
  end;
  ShowMessage('End!');
  TButton(Sender).Enabled := True;
end;


にしの  2002-10-03 22:45:41  No: 1634

try
    Button1.Enabled := False;
    Memo1.Lines.Add('AAA');
    sleep(2000);
  finally
    Button1.Enabled := True;
  end;

だと、ダブルクリックでAAAが2回追加されます。

  try
    Button1.Enabled := False;
    Memo1.Lines.Add('AAA');
    sleep(2000);
  finally
    Application.ProcessMessages;
    Button1.Enabled := True;
  end;

だと、ダブルクリックしても1回しか入りません。

# Application.ProcessMessages;の位置が重要


Lupin3rd  2002-10-04 00:27:37  No: 1635

ほう!なるほどProcessMessagesが必要なのですね。
分かりました。お二方ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加