DoLoop中、DoEventで開放した時に処理できるイベントは?

解決


ボー  2006-12-08 22:52:29  No: 134500

お世話になります。
VB2005を使用しています。
初歩的な質問で申し訳ございません。

DoLoop中にDoEventで開放した時に処理できるイベントで気になった箇所があるのでお願いします。

現在時刻をDo~Loopを使用してStopボタンが押されるまでLabelに表示しているのですが、Stopボタンを2回クリックしないとClickイベントが動作しません。
DoEventを使用し、イベントは1回のクリックですべて見られないのか教えて頂きたいです。

尚、Loop内にStopボタンのFocusSetするとクリック1回で、関わるイベントすべて動作してくれるのは調査済みです。

Public Index As Integer = 0

    Private Sub BtnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnStart.Click
        Dim NowTime As String
        Dim NowMilliTime As Integer
        Dim FNowMilli As String = ""

        Index = 0

        Do
            NowTime = System.DateTime.Now
            NowMilliTime = System.DateTime.Now.Millisecond

            FNowMilli = Format$(NowMilliTime, "000")
            Label1.Text = NowTime
            Label2.Text = FNowMilli

      'BtnStop.Focus()
            My.Application.DoEvents()

            If Index = 1 Then
                Exit Do
            End If
        Loop
    End Sub

    Private Sub BtnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnStop.Click
        Index = 1
    End Sub


大吉末吉  2006-12-08 23:15:02  No: 134501

ボー さん  こんにちは。

> Stopボタンを2回クリックしないとClickイベントが動作しません。
> DoEventを使用し、イベントは1回のクリックですべて見られないのか教えて頂きたいです。

StartボタンのClickイベント中に処理しているので、Clickイベントが未完了のままです。
その為、フォーカス(Captureの方?)がStartボタンに残っています。

ですから、次のClick(厳密に言えばMouseUp)が行われるまで、マウス操作の対象はStartボタンのままなのではないでしょうか?
#ですら、1度のClickでは反応できません。

SetFocusの代わりに、
> BtnStart.Capture = False
で、Captureを解除してみるとか・・・


ボー  2006-12-09 00:00:00  No: 134502

なるほど!
確かにそうでした。

未完了だからと言われるまで全然気がつかなかったです。
Focusを移動したら出来たので、そこに問題があるのだと一点凝視してました…

モヤモヤがなくなりました。
早期回答、ありがとうございます!


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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