2011-12-06 28 views
3

私はほぼ20のTextboxと5のComboboxと1つのコントロールを別のものに依存しています これでフォームのコードを、 を入力キーとを入力します。キーは同じ機能を持つ必要があります。Tabキーの機能VB.NetのEnterキーを使用

のように私は Enterキーを押したときに次のコントロールにフォーカスが移動しても実行しなければならないタブキーを押すことで。 同様にを入力した場合 Keyキープレスイベントにはいくつかのプロセスコードが書かれていますが、これはTabキーを押したときにも実行されます。

+0

このフォームを使用してデータを送信しますか?私はそれを行うことができると確信していますが、これを行うために典型的なパワーユーザーのキーを変更することは悪い考えのように思える... – Matt

答えて

5

私はWinformsの中でそれを達成した方法は、SelectNextControl法を用いることです。あなたがWPFを使用している場合

すなわち

Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) 
    Dim tb As TextBox 
    tb = CType(sender, TextBox) 

    If Char.IsControl(e.KeyChar) Then 
     If e.KeyChar.Equals(Chr(Keys.Return)) Then 
      Me.SelectNextControl(tb, True, True, False, True) 
      e.Handled = True 
     End If 
    End If 
End Sub 

を使用できTraversalRequest

すなわち

Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) 
    Dim tb As TextBox 
    tb = CType(sender, TextBox) 

    If e.Key = Key.Return Then 
     tb.MoveFocus(New TraversalRequest(FocusNavigationDirection.Next)) 
    ElseIf e.Key = Key.Tab Then 
     Exit Sub 
    End If 
End Sub 

限りタブを遮断するようキーこのStackoverflow questionを見てみましょう。

-2

あなたは、いくつかのJavaScriptでそれを行うことができます。 Enter Key Focus

+0

質問は約vb.net – emaillenin

1

単純に次の関数

Public Sub perform_tab_on_enter(ByVal e As KeyEventArgs) 
If e.KeyCode = Keys.Enter Then 
    SendKeys.Send("{TAB}") 
else 
    exit sub 
End If 
e.SuppressKeyPress = True 'this will prevent ding sound 
End Sub 

コントロールのKeyDownイベントイベントの呼び出しこの機能

4

まず= Trueの フォームのKeyPreviewプロパティを作成し、その後、フォームのKeyDownイベントのイベントに以下

If e.KeyCode = Keys.Enter Then 
    Me.SelectNextControl(Me.ActiveControl, True, True, True, False) 'for Select Next Control 
End If 
をコードを貼り付けします
0

私が同じ問題に使用するより良いオプションは、新しいテキストボックスクラスtextboxClassを作成し、次のcを貼り付けることですそのキー押下イベントのode

Private Sub commonTextbox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress 
      If Char.IsControl(e.KeyChar) Then 
       If e.KeyChar.Equals(Chr(Keys.Return)) Then 
        Me.Parent.SelectNextControl(Me, True, True, False, True) 
        e.Handled = True 
       End If 
      End If 
    End Sub 

任意のフォームに任意の数のテキストボックスを追加できます。必要に応じて動作します。最後のテキストボックスでEnterキーを押すと、最初のフォーカスに移動します。

このコードは、このページの@マークホールからの単一テキストボックスのものです。

1

私は、手動で各コントロールのイベントハンドラを作成または設定することなく、これを達成できました。フォームの初期化時には、すべてのコントロールをループして汎用ハンドラ関数を追加する関数を実行します。

Private Sub AddHandlers() 
    Try 
     'Get the first control in the tab order. 
     Dim ctl As Windows.Forms.Control = Me.GetNextControl(Me, True) 
     Do Until ctl Is Nothing 
      If TypeOf ctl Is System.Windows.Forms.TextBox Or TypeOf ctl Is System.Windows.Forms.ComboBox _ 
        Or TypeOf ctl Is System.Windows.Forms.CheckBox Or TypeOf ctl Is System.Windows.Forms.DateTimePicker Then 

       AddHandler ctl.KeyDown, AddressOf ReturnKeyTabs 
      End If 
      'Get the next control in the tab order. 
      ctl = Me.GetNextControl(ctl, True) 
     Loop 
    Catch ex As Exception 
    End Try 
End Sub 

Private Sub ReturnKeyTabs(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) 
    If e.KeyCode = System.Windows.Forms.Keys.Return Then 
     e.Handled = True 
     e.SuppressKeyPress = True 
    End If 
    ReturnKeyTabs(e.KeyCode) 
End Sub 

Private Sub ReturnKeyTabs(ByVal KeyCode As System.Windows.Forms.Keys) 
    If KeyCode = System.Windows.Forms.Keys.Return Then 
     System.Windows.Forms.SendKeys.Send("{Tab}") 
     KeyCode = 0 
    End If 
End Sub 
関連する問題