3

私が取り組んでいる現在のアプリケーションでは、独自のカスタム コントロールを使用してコンボ ボックスをシミュレートしたいと考えています。これは、複数の列を作成し、いくつかの追加機能を持たせたいためです。これを行うために、テキスト ボックスと datagridview を使用しています。

通常のコンボ ボックスで使用できるサジェスト/アペンドを複製したいと考えています。私はこれがうまく機能しています。ユーザーは入力を開始し、候補のリストを取得し、上下のキーを使用してエントリをスクロールできます。

選択した行を値として取得するために、Enter キーを既にトラップしています。これは完全に機能しますが、コンボ ボックス コントロールに既に埋め込まれている機能と同じように、タブ キーをトラップして同じことを行いたいと考えています。

問題は、明らかにvb.netがタブキーを使用して選択したコントロールを変更し、サブルーチンを呼び出してデータグリッドビューから選択した行を取得する前にこれが発生することです。コントロールからのタブ移動をキャンセルできるようにしたい、または少なくともコードを起動する前にコードを起動する方法を見つけたい。

前もって感謝します。

4

2 に答える 2

6

TextBox には、次のAcceptsTab場合に機能するプロパティもありますMultiline = True

これらの条件で、Tab キーが押されたかどうかを確認できるようになりました。

Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) _
                             Handles TextBox1.KeyDown
  If e.KeyCode = Keys.Tab Then
    e.SuppressKeyPress = True
    'do something
  End If
End Sub
于 2012-08-15T12:25:35.783 に答える
-2

この場合の問題は、TAB キーを押すと、keydown イベントにバインドする必要がある入力要素へのフォーカスが失われ、このようなコールバック関数を使用することです。

   var code = e.keyCode || e.which;
   if (code == '9') {
     alert('Tab');
     return false;
   }
于 2012-08-15T12:26:41.867 に答える