投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/11/4 09:52:35
> TextBox1.BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod))
Form1 と TextBox1 は通常、同じスレッドに属する物ですので、
TextBox1.BeginInvoke は、Me.BeginInvoke や BeginInvoke と書いても同じです。


> 次のイベント発生後まで待機させているのだと思い込んでいましたが、
BeginInvoke は、アイドル時(つまり、メッセージが空になったとき)に呼び出されることになります。

なので提示頂いたケースだと、「次のイベント発生後まで待機」するのではなく、
実質的には「現在のイベントの End Sub 通過直後」に呼ばれことになるでしょう。

たとえば下記の場合、Label1/2 は "abc" ですが、Label3 は "acb"、Label4 は "acbd" となります。
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Label1.Text = "a"
        Call Sub() Label1.Text &= "b"
        Label1.Text &= "c"
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Label2.Text = "a"
        Invoke(Sub() Label2.Text &= "b")
        Label2.Text &= "c"
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Label3.Text = "a"
        BeginInvoke(Sub() Label3.Text &= "b")
        Label3.Text &= "c"
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Label4.Text = "a"
        BeginInvoke(Sub() Label4.Text &= "b")
        Label4.Text &= "c"
        Application.DoEvents()
        Label4.Text &= "d"
    End Sub
End Class



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

CausesValidation プロパティおよび Validating / Validated イベントは、
遷移元をトレースするという使い方ではなく、e.Cancel 引数と組み合わせて
入力検査を設けるための補助機構です。

フォーカス遷移順そのものを捉えたいなら、Enter/Leave イベントをきちんと管理すれば済むはずです。
統括的に捉えたい場合は、下記の じゃんぬねっと さんの記事を参考にしてみてください。
http://blogs.wankuma.com/jeanne/archive/2007/04/02/69804.aspx