0

25個のテキストボックスコントロールがあります。次のコードは、2つのテキストボックス専用です。したがって、25個のテキストボックスの場合、コードは長くなりますが、コードを短くすることはできますか?

 Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles IDTextBox.KeyDown, DateDateTimePicker.KeyDown, ItemCodeTextBox.KeyDown, BrandTextBox.KeyDown, ItemTextBox.KeyDown
    If e.KeyCode = Keys.Enter And Me.IDTextBox.Focused Then
        Me.DateDateTimePicker.Focus()
    Else
        If e.KeyCode = Keys.Down And Me.IDTextBox.Focused Then
            Me.DateDateTimePicker.Focus()
        Else
            If e.KeyCode = Keys.Up And Me.DateDateTimePicker.Focused Then
                Me.IDTextBox.Focus()
            Else
                If e.KeyCode = Keys.Enter And Me.DateDateTimePicker.Focused Then
                    Me.ItemCodeTextBox.Focus()
                Else
                    If e.KeyCode = Keys.Down And Me.DateDateTimePicker.Focused Then
                        Me.ItemCodeTextBox.Focus()
                    Else
                        If e.KeyCode = Keys.Up And Me.ItemCodeTextBox.Focused Then
                            Me.DateDateTimePicker.Focus()
                        End If
                    End If
                End If
            End If

        End If
    End If

End Sub
4

2 に答える 2

1

Enterキーと矢印キーを使用してフォームのナビゲーションを有効にしようとしていると想定しています。

その場合:

  1. そのコードを削除する
  2. フォームのデザインビューを選択します
  3. VBツールバーを右クリックして、「レイアウト」ツールバーが表示されていることを確認します
  4. 「タブオーダー」と呼ばれる右端のボタンをクリックします
  5. 必要な順序で各コントロールをクリックします
  6. フォームの「KeyPreview」プロパティをTRUEに設定します

次に、次のコードを追加します。

Private Sub Form1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
  If Me.ActiveControl.GetType Is GetType(DateTimePicker) Then
    'DateTimePicker
    Select Case e.KeyCode
      Case Keys.Enter
        Me.SelectNextControl(Me.ActiveControl, True, True, True, True) 'forwards
    End Select
  ElseIf Me.ActiveControl.GetType Is GetType(TextBox) AndAlso Not DirectCast(Me.ActiveControl, TextBox).Multiline Then
    'normal Textbox
    Select Case e.KeyCode
      Case Keys.Up
        Me.SelectNextControl(Me.ActiveControl, False, True, True, True)  'backwards
      Case Keys.Down, Keys.Enter
        Me.SelectNextControl(Me.ActiveControl, True, True, True, True) 'forwards
    End Select
  ElseIf Me.ActiveControl.GetType Is GetType(TextBox) AndAlso DirectCast(Me.ActiveControl, TextBox).Multiline Then
    'multiline Textbox - ignore
  Else
    'all other controls
    Select Case e.KeyCode
      Case Keys.Up
        Me.SelectNextControl(Me.ActiveControl, False, True, True, True)  'backwards
      Case Keys.Down, Keys.Enter
        Me.SelectNextControl(Me.ActiveControl, True, True, True, True) 'forwards
    End Select
  End If
End Sub

上/下矢印キーは実際にはDateTimePickerによって使用されるため、ナビゲーションコマンドとして除外する必要があります。逆に、複数行のテキストボックスはENTERキーを使用するため、その場合、ナビゲーションコマンドとしてENTERを除外する必要があります。

于 2012-08-30T06:30:17.073 に答える
-1

使用すると、「If」条件の代わりに「SelectCase」を使用してコードをクリーンにすることができます。これははるかにクリーンになります。このリンクを参照してください

@Farook......これを試してください

Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    Select Case True
        Case (e.KeyCode = Keys.Down And Me.ActiveControl.GetType IsNot GetType(DateTimePicker))
                Me.SelectNextControl(Me.ActiveControl, True, True, True, True) 'forwards
        Case (e.KeyCode = Keys.Enter And Not (Me.ActiveControl.GetType Is GetType(TextBox) AndAlso DirectCast(Me.ActiveControl, TextBox).Multiline))
            Me.Text = Me.SelectNextControl(Me.ActiveControl, True, True, True, True).ToString  'forwards
        Case (e.KeyCode = Keys.Up And Me.ActiveControl.GetType IsNot GetType(DateTimePicker))
            Me.SelectNextControl(Me.ActiveControl, False, True, True, True)  'backwards
    End Select
End Sub
于 2012-08-30T05:16:56.730 に答える