1

私は 3 つのパネルを持つフォームを持っています。特定の時間に特定のコントロール グループを非表示/表示する必要があるため、パネルが作成されます。これまでは問題なく機能していました。つまり、TAB キーを使用してフォームをナビゲートする特定の方法を求められるまでは。

まず、Panel オブジェクトに TabIndex プロパティがないことに気付きました。最も重要なことは、入れ子になったナビゲーション アルゴリズムに従いたくないということです。独自のシーケンスを設定したいだけです。

これまでオンラインで読んだことから、これはパネルでは不可能です。私の唯一の選択肢は、フォーム上のすべてのコントロールを同じパネルに配置することです。

何かご意見は?アプリを再配置する気はなく、個々のコントロールを非表示にして表示し始めます。

4

3 に答える 3

4

Tab キーを押すと、ControlCollection 内の次のコントロールにフォーカスが移動します。フォーカスは常に Panel 内のコントロールにあり、パネル自体にはないため、Panel がタブ インデックスをサポートするとどのように期待できますか?

自分が何をしようとしているのか、もう一度考えてみることをお勧めします。特定のパネルが表示されている場合、TAB はパネル内のコントロールをナビゲートする必要があります。TAB で次のパネルに移動しても意味がありません。これは通常、ボタンまたはその他のコントロールで行われます。ユーザーは、TAB がフォーカスを移動し、アクションを実行しないことを期待しています。さらに、TAB でパネル間を移動したい場合は、すべてのコントロールの Tab Stop プロパティを false に設定する必要があります。

于 2009-01-27T07:19:12.747 に答える
2

同じ問題がありました。私の解決策は、すべてのコントロールをフォームのサブパネルに配置することでした。.net アルゴリズムのタブ移動は、TabIndex を使用して「現在の」コンテナ内でタブ移動することです。コンテナー内の TabIndex のいずれかが同じ場合、z オーダーの最初のものが最初になります。

コンテナー (フォームはコンテナーです) に入ると、コンテナー (パネル) 以外のすべてのコントロールが最初にタブ化されます。最後の非コンテナ コントロールを離れると、パネルが再帰されます。

したがって、すべてのコントロールが同じレベルのコンテナー/パネルに配置されている場合、タブ移動は期待どおりに行われます。

問題例:

形

  control1 Tabindex=1

  パネル1

    control2 タブインデックス=2

    control3 タブインデックス=2

  パネル2

    control4 Tabindex=4

    control5 Tabindex=5

  control6 Tabindex=6

タブ移動は次の順序になります (予想とは異なります)。

  コントロール1

  Control6 <-- あなたが望んでいた/期待したものではありません

  コントロール2

  コントロール3

  コントロール4

  コントロール5

タブを正しく配置するには、次のパターンでレイアウトします。

形

  パネル0

    control1 Tabindex=1

  パネル1

    control2 タブインデックス=2

    control3 タブインデックス=2

  パネル2

    control4 Tabindex=4

    control5 Tabindex=5

  パネル3

    control6 Tabindex=6
于 2010-02-01T16:18:26.353 に答える
0

私はあなたがそこにかなり立ち往生していると思います-私はそのネストされたナビゲーションを回避する直接的な方法を知りません。

ただし、コントロールのグループを表示/非表示にすることはそれほど大したことではないと思います。

private void SetPrimaryControlVisibility(bool visible)
{
  ctrlA.Visible = visible;
  ctrlB.Visible = visible;
  ctrlF.Visible = visible;
}

private void SetSecondaryControlVisibility(bool visible)
{
  ctrlC.Visible = visible;
  ctrlE.Visible = visible;
  ctrlG.Visible = visible;
}

コードを書くのはもう少しですが、20秒かかりました。そして、それらがすべてフォームサーフェス上にある場合は、タブインデックスを使用できます。

今考えてみましたが、自分たちのパネルで何が問題なのですか?パネルを使用して表示/非表示にしている場合は、とにかく他のパネルにタブで移動していません。

もう1つのオプションは、主要なイベントハンドラーを作成することですが、それは避けたいと思います。これは、保守が不可能な大きな混乱になります。

于 2009-01-27T02:40:13.683 に答える