2012-12-21 2 views
0

화살표 키를 사용하여 컨트롤 (위/아래)을 탐색하려고합니다.
예제를 시도해보고 새 form1을 만든 다음이 코드를 붙여 넣으십시오.vb.net의 화살표 키로 이동

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 

어떻게 될까요?
프로그램을 시작하고 화살표로 탐색 할 때 컨트롤 주위에 '초점 맞추기'가 없으며 일부 상황에서는 tabstop = false를 사용하여 컨트롤에 "포커스가 벗어났습니다"라는 포커스가 있습니까?

하지만 ...

화살표가 그 탐색이 잘 된 후 내가 컨트롤을 통해 TAB 키를 한 번 통과하면, RECT가의 표시 집중하고 모든 것이 OK입니다.

여기에 어떤 문제가있을 수 있습니까? 화살표로 탐색하는 방법은 프로그램 시작 직후 탭 키와 동일하게 동작합니까? 여기 C# code

그리고 VB 내 번역은 다음과 같습니다

+0

의 중복 가능성 [초점 사각형은 탭 키를 누를 때까지 표시되지 않는 이유는 무엇입니까? (http://stackoverflow.com/questions/9226433/why-is-focus-rectangle-not - show-tab-key-pressed) –

+0

지금은 복제본 일지 모르지만 여기서는 조사 할 수있는 완전한 코드이며 내 예제에는 문제가있는 라디오 버튼이 없습니다. 또한 윈도우 7! –

+0

제안 된 수정 프로그램이 작동하는지 확인하십시오. 문제의 원인이되는 사용자 설정임을 알리는 메시지입니다. –

답변

1

은 여기 "코드를 통해"예상대로 작동 것들을 얻을 수있는 솔루션을 찾을 수 있습니다. 일부 공개 모듈 수입을 추가에서
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() 

일단 충분하다 :

관련 문제