none
MDIの子フォームについて RRS feed

  • 質問

  • けんと申します

    VB.NET2003です

    MDIの親フォームにひとつの子フォームがあり、親フォームと子フォームを同時に表示しています。

    親フォームと子フォームには、テキストボックスがあり、タブの制御をしたいのですが、

    うまくいきません。

    具体的には、

    親のテキストボックスA ---> 親のテキストボックスB  ---> 子ののテキストボックスC

    ---> 子ののテキストボックスD --->親のテキストボックスE

    ようにタブキーでフォーカスの移動をしたいのですが。

    子フォームは、フォーカスがアクティブでないとタブの移動は、できないのでしょうか?

    基本的質問ですまいませんが、よろしくお願いします。

     

    2006年5月24日 22:11

すべての返信

  •  けんちゃん さんからの引用

    MDIの親フォームにひとつの子フォームがあり、親フォームと子フォームを同時に表示しています。

    子フォームは、フォーカスがアクティブでないとタブの移動は、できないのでしょうか?

    #2005で試しました。

    MDIフォームにユーザーコントロール(TabStop=Trueのコントロールが複数)が貼り付けてあり
    そこへ子フォームを表示して試しました。

    結果、親内のTabIndexの先頭および最終を抜けると、その時点でのMDIChildren(0)に移るようです。
    また、その後はその子フォーム内で循環しました。

    仕様という気がしますが。。。

    2006年5月25日 0:41
  • 子フォームの ProsessDialogKeyメソッドをオーバーライドしてやれば可能ですよ



        Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
            If TypeOf ActiveControl Is TextBox Then
                Dim oTxt As TextBox = CType(ActiveControl, TextBox)
                'MDIフォームを取得
                Dim oFrm As MainFrame
                oFrm = Me.ParentForm
                ' TABの場合
                If keyData = Keys.Tab Then
                    If oTxt Is TextBox2 Then
                        oFrm.TextBox1.Focus()
                        Return True
                    End If
                ' SHIFT+TABの場合
                ElseIf keyData = (Keys.Shift Or Keys.Tab) Then
                    If oTxt Is TextBox1 Then
                        oFrm.TextBox2.Focus()
                        Return True
                    End If
                End If
            End If
            Return MyBase.ProcessDialogKey(keyData)
        End Function

     

    こんな具合です

    2006年5月25日 3:04