1

実行時にスワップされる多数のパネルを使用するアプリケーションに取り組んでいます。パネルのスワッピングは、キーダウン イベントを処理し、アプリケーションの現在の「状態」を調べてキーのルーティング方法を決定することによって制御されます。

パネルとラベルを移動するフォーム デザイナーでいくつかのクリーンアップ作業を行っていましたが、キーダウン イベントでメイン フォームがタブ キーを取得する機能を何らかの形で無効にしました。Enterキーを含む他のすべてのキーは引き続き取得します。

コードは変更されておらず、Tab キーで正常に機能することが十分にテストされているため、デザイナーで遊んでいるときに誤っていくつかの重要なプロパティをオフにしてしまったことしか想像できません。

メインフォームでキープレビューをオンにしています。他のキーイベントを取得したので、キーダウンハンドラーが正しく機能しているとは思いません。どういうわけか、私のフォームはタブキーのフィードを停止しました。TabIndex には連続番号が付けられますが、keypreview を使用してイベントを処理してから、tabindex に次のジャンプを決定させるため、重要ではありません。

これは、そこに行って以前に戦ったことがある人にとっては簡単なことかもしれないと思いました。タブキーがまだ機能しているバックアップがありますが、今日ロジックを大幅に変更したため、ロールバックしたり、フォーム上のすべてのオブジェクトを並べて比較したりする準備ができていません。

4

2 に答える 2

2

それはうまくいかないはずです。フォーカスを取得できるフォームにコントロールがある場合はそうではありません。Tab キーとカーソル キーはナビゲーションに使用され、あるコントロールから別のコントロールにフォーカスを移動します。

KeyPreview プロパティは VB6 の従来の互換性プロパティで、カスタム ショートカット キーストロークを実装するために使用されます。ナビゲーション キーをインターセプトするコードは、フォームの KeyDown イベントを発生させるコードの前に実行されます。代わりに ProcessCmdKey() メソッドをオーバーライドする必要があります。これはナビゲーション コードのに実行されるため、Tab キーとカーソル キーを確認できます。

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
    If keyData = Keys.Tab Then
        '' Do something, preferably navigation related since that what the user expects
        ''...
        Return True   '' That means that the key was consumed
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function
于 2012-10-11T18:40:29.590 に答える
0

私はタブストップを検索し、これがtrueであるオブジェクトを探しました。

VSでの「検索」では何も見つかりませんでしたが、プロジェクトに追加した最後のパネルに、タブストップがオンになっているリストボックスが表示されました。

これをオフにすると、コードがタブキーを取得していた元の場所に戻りました。

于 2012-10-11T18:53:21.960 に答える