投稿者 hori  (社会人) 投稿日時 2021/11/3 10:32:39
その後、今書いているプログラムに入れてみたのですが

    Delegate Sub InvokeDelegate()

    Private Sub TextBox1_Leave(sender As Object, e As EventArgs)

        TextBox1.BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod))

    End Sub


は、有っても無くても同じでした。

てっきり、TextBox1.Leave の発生を次のイベント発生後まで待機させているのだと思い込んでいましたが、TextBox2.に Enter したとき動かないのでそうではないみたいです。
考えてみれば、全てのイベントに flg の変更を書き込まなければならなくなるので馬鹿気た話ですね。

と云う事で、話は振出しに戻ってしまいました。

Validating や Validated も当たってみましたが、そのイベントの発生原因を通知する関数は無いようなので適さないようです。

で、いろいろ試した結果、MouseEnter を使えそうなので以下のようにしました。

Public Class Form1

    Dim ms As String = "on"

    Private Sub TextBox1_Enter(sender As Object, e As EventArgs) Handles TextBox1.Enter

        Label1.Text = ""

        TextBox1.Text = ms

        ms = "on"

    End Sub

    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown

        If e.KeyData = Keys.Enter Then

            TextBox2.Select()

        End If

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        TextBox2.Text = "bc : " & ms

        ms = "BC"

        TextBox1.Text = ms & Now.ToString("ssfffff")

    End Sub

    Private Sub TextBox2_Enter(sender As Object, e As EventArgs) Handles TextBox2.Enter

        TextBox2.Text = ms

    End Sub

    Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave

        WWW()

    End Sub

    Private Sub TextBox2_MouseEnter(sender As Object, e As EventArgs) Handles TextBox2.MouseEnter

        ms = "on"

    End Sub

    Private Sub Button1_MouseEnter(sender As Object, e As EventArgs) Handles Button1.MouseEnter

        ms = "off"

    End Sub

    Private Sub WWW()

        Label1.Text = ms & Now.ToString("ssfffff")

    End Sub

End Class