3

私は上司によって設計された VB.NET (2005) アプリケーションを持っています。このアプリケーションは 100 を超える入力および表示コントロール (テキスト ボックス、コンボボックスなど) を使用し、その多くにはラベルが関連付けられています。上司から、タブ オーダーを設定してからキープレスをトラップして、ユーザーが Enter キーを使用してコントロールを移動できるようにするように依頼されました。このような 2 つのアプリを使用しています。

タブ オーダーについては、View/TabOrder 機能を使用できませんでした。青い小さな tabindex ポップアップが非常に多く表示されているため、クリックするフォーム上のコントロールが表示されないためです。ポップアップを「スルー」してクリックしてみましたが、成功しましたが、それでも必要なタブ順序が得られませんでした。CodeSMART に付属のタブ アシスタントも、希望どおりの結果が得られなかったので、それを使用することができました。

このユーザーコントロールのコントロールは多くのグループに分散され、グループは複数の分割コンテナパネルに分散されます。メイン分割コンテナの最初のパネルには 3 つのメイン グループボックスがあり、ツールストリップ ボタンを介して選択されます (目的のグループ ボックスを表示に設定し、他のグループ ボックスを非表示に設定します)。

例:

Private Sub ShowMainPanel()
    'Note: Panels are groupboxes
    Me.MaterialPanel.Visible = False
    Me.HaulPanel.Visible = False
    Me.MainPanel.Visible = True

End Sub

これらのグループボックスのそれぞれには、さらにグループボックスが含まれており、それぞれに 1 ~ 15 のコントロールが含まれています。読み取り専用のものもあれば、ユーザーからの情報が必要なものもあります。必要なコントロールでは、タブ ストップが true に設定されています。

そのため、各メイン グループ パネルのタブインデックスを 0 ~ 2 に手動で設定します。次に、最初のグループ ボックス (メインパネル) について、含まれるコントロールとグループ ボックスのそれぞれにタブインデックスを設定します。非コンテナ タイプのコントロールのタブ インデックスは 0 ~ 25 に設定され、メインパネルのグループボックス (サブ グループ) は 26 ~ 48 です。次に、これらのサブ グループの各コントロールに移動し、これらのコントロールのタブ インデックスを で始まるように設定します。グループの 0 ~ Control.count-1。

要約すると、私のタブ オーダーは次のようになります (省略形)。

mainPanel = 0
  1st fields = 0.0
  2ndfield = 0.1
  3rd field = 0.2
  1st group = 0.3
    1st field in 1st grp1 = 0.3.0
    2nd field in 1st grp1 = 0.3.1
  2nd group = 0.4
    1st field in 1st grp2 = 0.4.0
    2nd field in 1st grp2 = 0.4.1
materialPanel = 1
  1st fields = 1.0
  2ndfield = 1.1
  3rd field = 1.2
  1st group = 1.3
    1st field in 1st grp1 = 1.3.0
    2nd field in 1st grp1 = 1.3.1
  2nd group = 1.4
    1st field in 1st grp2 = 1.4.0
    2nd field in 1st grp2 = 1.4.1

注: たとえば、tabindex には 1.4.0 を実際には入力しませんでしたが、コントロールには 0、サブ グループには 4、メイン グループには 1 を入力しました。

次に、タブ オーダーに基づいて [ドキュメント アウトライン] パネルで zorder を設定します。

このすべてを行った後、メインパネルで作業したかったタブ オーダーを最終的に取得することができました。

しかし、他の 2 つのグループボックス (materialPanel と hauspanel) に同じものを適用すると、タブは完全に無視されます。タブはアプリ内でまったく機能しません。2 番目からメインのグループボックス (MaterialPanel および HaulPanel) 用。アプリはコントロール ライブラリであるため、デバッグ時に組み込みの UserTestContainer を使用します。2 番目の 2 つのグループ ボックスのいずれかが表示されている場合、Tab キーはフォーカスをアプリからテスト コンテナーに移動します。

これは、1 番目のグループボックス (MainPanel) では発生しません。それは正常に動作します。

このようなものを設定するには、面倒な作業に約 3 ~ 4 時間かかりました。コントロールの数が多いため、このアプリケーションは操作が難しく、フォーム デザイナに変更が加えられるたびに、処理に 15 ~ 20 秒かかります。

ここで何が起こっているかについて手がかりを持っている人はいますか?

4

2 に答える 2

0

GroupBoxes がフォームの最後のタブ インデックスに割り当てられているように聞こえるため、入力フォーカスの次の実行可能なオプションはフォーム自体であり、この場合はテスト コンテナーです。

KeyPreview イベントをキャプチャできますか? キーの押下をキャンセルしてから、内部で保持されているコントロールの順序のコレクションを使用して、フォーカスを与えます。コントロールの数を考えると、とにかくコードでこれを行う必要があるようです。Groupbox/Panel の .Controls プロパティを使用し、そのコレクションを反復処理して必要な正確なコントロールを見つけることでフォーカスを処理すると、メンテナンスがはるかに簡単になります。

于 2009-07-16T03:00:10.450 に答える