0

矢印キー(上/下)を使用してコントロールをナビゲートしようとしています。
私の例を試すには、新しいform1を作成し、このコードを貼り付けます。

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim tb As New TextBox
    Dim cb As New CheckBox
    Dim cbb As New ComboBox
    Dim b1 As New Button
    Dim b2 As New Button

    With Me
        .KeyPreview = True
        .Size = New Size(350, 200)
        With .Controls
            .Add(tb)
            With tb
                .TabIndex = 0
                .Location = New Point(95, 20)
                .Text = "This is"
            End With
            .Add(cb)
            With cb
                .TabIndex = 1
                .Location = New Point(95, 50)
                .Checked = True
                .Text = "Example checkbox"
                .AutoSize = True
            End With
            .Add(cbb)
            With cbb
                .TabIndex = 2
                .Location = New Point(95, 80)
                .Text = "an Example"
                .DropDownStyle = ComboBoxStyle.DropDownList
            End With
            .Add(b1)
            With b1
                .TabStop = False
                .Location = New Point(90, 130)
                .Text = "Nothing"
            End With
            .Add(b2)
            With b2
                .TabStop = False
                .Location = New Point(170, 130)
                .Text = "Exit"
                AddHandler b2.Click, AddressOf b2_Click
            End With
        End With
    End With
End Sub

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.Up Then
        e.Handled = True
        Me.SelectNextControl(Me.ActiveControl, False, True, True, True)
    End If

    If e.KeyCode = Keys.Down Then
        e.Handled = True
        Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
    End If
End Sub

Private Sub b2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Me.Close()
End Sub

End Class

何が起こるのですか?
プログラムを開始して矢印でナビゲートするとき、コントロールの周りに「フォーカス長方形」がなく、状況によっては、タブストップ=falseのコントロールに「ランアウト」することに焦点を合わせます。

だが...

矢印でのナビゲートがうまくいった後、Tabキーでコントロールを1回通過すると、フォーカス長方形が表示され、すべてがOKになります。

ここで何が問題になる可能性がありますか?プログラムの開始直後に、矢印でナビゲートするのがタブキーの場合と同じように動作するようにするにはどうすればよいですか?

4

1 に答える 1

1

ここで、「コードを介して」期待どおりに動作させるための解決策を見つけます: C# コード

そして、これが私のVBへの翻訳です。
1)一部の公開モジュールでインポートを追加します...

Imports System.Runtime.InteropServices

2) この宣言を同じモジュールに入れます。

<DllImport("user32.dll")> _
Private Sub SystemParametersInfo(ByVal uiAction As UInteger, ByVal uiParam As UInteger, ByRef pvParam As Integer, ByVal fWinIni As UInteger)
End Sub

' Constants used for User32 calls. 
Const SPI_SETKEYBOARDCUES As UInteger = &H100B

3) このパブリック関数を同じモジュールに入れます。

''' <summary> 
''' Change the setting programmatically 
''' for keyboard shortcut Issue 
''' </summary> 
Public Sub GetAltKeyFixed()
    Dim pv As Integer = 1
    ' Call to systemparametersinfo to set true of pv variable.

    SystemParametersInfo(SPI_SETKEYBOARDCUES, 0, pv, 0)
    'Set pvParam to TRUE to always underline menu access keys, 
End Sub

4) プログラムの開始場所 (Form1 など) から次のように呼び出します。

GetAltKeyFixed()

一回だけで十分です :)

于 2012-12-21T09:35:51.160 に答える