TABキーの入力チェックとフォーカスの移動制御について

タグの編集
投稿者 hori  (社会人) 投稿日時 2013/4/22 12:51:47
まいど、お騒がせいたします。

以前、るきおさまにお世話になりまして機嫌よくやっていたのですが
Form に TextBox1 と 2 を作って次のようなコードを書いて
----------------------
 Private Sub TextBox1_PreviewKeyDown(ByVal sender As Object, _
       ByVal e As PreviewKeyDownEventArgs) _
       Handles TextBox1.PreviewKeyDown
        If e.KeyCode = Keys.Tab Then
            If TextBox1.Text = "111" Then
                MsgBox("111")
                TextBox1.Focus()
            End If
        End If
    End Sub
----------------------
メッセージボックスに "111" を表示させても
フォーカスはテキストボックス2に移ってしまいます。

このようなとき、テキストボックス1にフォーカスを戻すには
どうすればいいでしょうか?。
投稿者 たかくん  (社会人) 投稿日時 2013/4/22 12:59:47
こんにちは、TextBox1.SetFocus()でいけませんか?
投稿者 hori  (社会人) 投稿日時 2013/4/22 13:22:06
早速のご指南ありがとうございます。

試してみましたが

「SetFocus は System.Windows.Forms.TextBox のメンバーではありません」

となってダメでした。
ちなみに、使っているのは VB2010Express です。 すみません。
投稿者 hori  (社会人) 投稿日時 2013/4/22 14:01:50
自己解決ですが、他で探してたら見つけました。

TextBox.Focus() 

のところを

Me.SelectNextControl(Me.ActiveControl, False, True, True, True)

にすればうまいこといけました。
お騒がせいたしました。

端から探せってか?
でも、おんなじように分からん人もいるでしょう?
投稿者 YuO  (社会人) 投稿日時 2013/4/22 16:10:25
PreviewKeyDownのMSDNにあるとおり,
e.IsInputKey = True
と,「既定の動作を無視する代わりにそのキーが押されたことにする」という操作が必要です。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.previewkeydown(v=vs.100).aspx

MSDNにキーワードが書いてあるので,端から探す必要はないでしょうね。