VB.NETでクリックされるまで
処理を中断するプログラムを書いています。
Public Sub Weit()
Me.WeitFlg = True
Do
System.Threading.Thread.Sleep(100)
My.Application.DoEvents()
If Me.WeitFlg = False Then Exit Do
Loop
End Sub
上記の関数で処理を中断し、
Private Sub ALL_Click _
(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Click, labMain.Click, pictMain.Click
WeitFlg = False
End Sub
ALL_Click関数で処理を再開させようと目論んでいるのですが、
何故か一回目のクリックが無視され、
二回目のクリックで処理が再開されます。
WeitFlg = Falseにブレークを設定し、
処理を追ってみても、
一回目のクリックではALL_Clickに入っていないようです。
一回目のクリックがどんなイベントを発生させてるか判別したいのですが、
なにか方法はありますか?
また、問題となっている部分についての指摘もあればお願いします。
もしかしてWeit()をButton1_Clickなんかから呼んでませんか?
こうするとWeit()が終わるまで、Button1_Clickが終了せず、
次のクリックイベントが正しく処理されないと思われます。
VBはイベントドリブンなのにDo〜Loopで処理を止めるというのは
あまり良いスキームとは言えませんが、どうしてもこの方法でやりたいのなら、
タイマーなんかを使って、
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Timer1.Tick
Timer1.Enabled = False
Weit()
End Sub
などとWeitをタイマーから呼ぶ方法も有ります。
ツイート | ![]() |