初歩的な質問で申し訳ないのですが、
ボタンの二度押しを防止したいのですが、
どなたかご教授お願いします。
Procedure Form1.Button1Click();
Begin
Button1.Enabled:=False;
//
//なにかの処理中なので押しちゃだめ
//
Button1.Enabled:=True;
End;
説明が、たりなくて申し訳ありません。
二度押し君さんの言われている方法やっているのですが
確かに、Button1Clickイベントが、流れているときは、
クリックできないようです。
しかし、何回かクリックすると、一回目のButton1Clickイベントが
ながれた後に
クリックした回数だけ、Button1Clickイベントがはしっているみたいののですが・・・・・・・
プログラムが、はしっているButton1.Enabled:=False;中にクリックすると
クリックはできないのですが、
Button1.Enabled:=True;となりプログラムが最後までながれた後に
Button1.Enabled:=False;中にクリックされた回数だけ、
Button1Clickイベントがはしっているようなのですが・・・・・
結果的にButtonを何回か押せているのと同じ状況になっているのですが
どなたかお願いします。
Halbow です。
最後の
Button1.Enabled:=True;
を取ってしまえば、絶対に二度押しできません。
Procedure Form1.Button1Click();
begin
if (buttonを押してもいい条件) then begin
//
//なにかの処理中
//
end;
end;
または、ButtonのVisbleを処理中だけFalseにするのはだめですか?
Button1.Enabled:=True;
の前に、
Application.ProcessMessages;
を実行してみては?
みなさまありがとうございます。
Button1.Enabled:=True;
をはずせば、確かに二度押しは制御できるのですが
プログラムがながれたあとに再びボタンを押すことができないので
最後に、Button1.Enabled:=True;
は追加する必要があります。
Application.ProcessMessages;
を追加して、実行すると、思うように動くようになりました。
この処理にどのような意味があるのでしょうか?
勉強のため、ご教授お願いします。
ボタンが押されると、メッセージがとばされます。
メッセージは、「空いている時間」を使って処理されます。
クリックイベント中は、メッセージの処理がされません。明示的にメッセージを処理させるには、Application.ProcessMessages;を実行します。
メッセージがとばされる=PostMessageされる、です。
Skipではないです。
# 読んでみて曖昧だったので・・・
にしのさん、ありがとうございます。
大変勉強になりました。
ツイート | ![]() |