- PR -

ボタンの二度押し防止について

投稿者投稿内容
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-04-12 19:13

いつもお世話になっております。
現在、VB.net2003にてWindowsアプリケーションの開発を行っております。

さっそくの質問なのですが、
ボタンの二度押しを防止する方法をご教授いただけないでしょうか?
(※以下の方法以外にあれば)

よろしくお願いいたします。

  1.ボタンをDisable→Do Events→Enableボタン
    (上記の方法だと、Disable時にFocusが遷移してしまう。
     後で戻すことも出来るが遷移先のコントロール等で
     LostFocusイベント等が発生する。)

  2.フックにてどうにかする。
    (※出来るものなのかを、調査中でした。)

  3.メッセージキューをどうにか・・・。



Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-04-12 19:16
オーソドックスかどうかは自信がありませんが、
privateな変数を一つ用意してフラグとして利用するというのはどうでしょう。

Private buttonClicked As Boolean = False
と記述してあるとして、イベントの頭で
コード:
If buttonClicked Then Return
buttonClicked  = True


としてしまうとか。
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-04-12 19:55
さっそくのご返答ありがとうございます。

引用:

Ahfさんの書き込み (2007-04-12 19:16) より:
オーソドックスかどうかは自信がありませんが、
privateな変数を一つ用意してフラグとして利用するというのはどうでしょう。

Private buttonClicked As Boolean = False
と記述してあるとして、イベントの頭で
コード:
If buttonClicked Then Return
buttonClicked  = True


としてしまうとか。



上記の方法ですが、
当該フラグを戻すタイミングはどうなるのでしょうか?
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-04-12 20:02
引用:

.netさんの書き込み (2007-04-12 19:55) より:
引用:

Private buttonClicked As Boolean = False
と記述してあるとして、イベントの頭で
コード:
If buttonClicked Then Return
buttonClicked  = True


としてしまうとか。



上記の方法ですが、
当該フラグを戻すタイミングはどうなるのでしょうか?


イベントの最後でいいのでは?(イベントを抜けるまでは押させたくないのですよね?)
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-04-12 20:05
引用:

shimixさんの書き込み (2007-04-12 20:02) より:

イベントの最後でいいのでは?(イベントを抜けるまでは押させたくないのですよね?)



上記の方法だと、結果的にメッセージキューに溜まっているものが
1回目のイベント後に順次流れてしまうので、
二回実行されてしまうような気がするのですが。。。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-04-12 20:26
引用:

.netさんの書き込み (2007-04-12 20:05) より:
引用:

shimixさんの書き込み (2007-04-12 20:02) より:

イベントの最後でいいのでは?(イベントを抜けるまでは押させたくないのですよね?)



上記の方法だと、結果的にメッセージキューに溜まっているものが
1回目のイベント後に順次流れてしまうので、
二回実行されてしまうような気がするのですが。。。



ご自身の最初の投稿に解決策あるじゃないですか。
考え方は1.の方法で。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-04-12 20:28
#常用言語が違うので外しているかもしれませんが・・

引用:

.netさんの書き込み (2007-04-12 20:05) より:
上記の方法だと、結果的にメッセージキューに溜まっているものが
1回目のイベント後に順次流れてしまうので、
二回実行されてしまうような気がするのですが。。。


ん?Do Eventsは書かないということでしょうか?

私自身はDisable→処理→Enableだけで、Do Eventsを書くことは滅多にないので(汗

(追記)
あ、よねKENさんと被った・・



[ メッセージ編集済み 編集者: shimix 編集日時 2007-04-12 20:29 ]
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-04-12 20:37

ご返信ありがとうございます。

引用:

shimixさんの書き込み (2007-04-12 20:28) より:
#常用言語が違うので外しているかもしれませんが・・

ん?Do Eventsは書かないということでしょうか?

私自身はDisable→処理→Enableだけで、Do Eventsを書くことは滅多にないので(汗




Do Eventsを書くこと事態を問題視はしておりません。
冒頭の質問でも指摘しているのですが、
上記方法ではDisable時にフォーカスが他のコントロールに遷移してしまいませんか?
他のコントロールにフォーカスが遷移してしまいますと、GetFocus、LostFocus等のイベントが流れてしまうので、懸念しております。

スキルアップ/キャリアアップ(JOB@IT)