2

シナリオがどうであれ、この厄介な問題を 100% の確率で再現できます。.Net プロジェクト、C# または VB.Net を作成します。ToolStrip コントロールをフォームに追加します。少なくとも 2 つのメニュー項目を含む単純な DropDownButton をいくつか作成します。必要なその他のコントロール、リスト ボックス (正しくフォーカスを受け取ることができるように設定します)、および ComboBox コントロールを追加します。ショートカット キーを割り当てるか、ToolStrip で TabStop を有効にして、キーボードでフォーカスを受け取ることができるようにします。

プロジェクトを実行します (デバッグ/リリース、好きな方)。キーボードを使用して、ToolStrip にフォーカスを与えます (タブまたはショートカット キーを使用)。下向き矢印でサブ項目に移動します。エスケープ キーを選択して、ツールストリップ サブメニューを折りたたみます。いくつかの項目を含む ListBox または ComboBox に移動します。すべてが素晴らしく見えますよね?これらのコントロール内を移動するには、矢印キーを使用してください... 驚きです! ToolStrip に背を向けても、フォーカスがあると思っていたコントロールはそうではありません!

ListBoxにフォーカスを強制するために、複数のことを試しました。一例として、OnEnter (ListBox.Enter+=...) のイベント ハンドラーを追加し、次のようなコードを追加します。

ListBox.Focus();
ListBox.Select(); 

何も成功しませんでした...ツールストリップでメニューが展開されると、キーボードを使用してこのコントロールに永遠に行き詰まるようです...キーボード ナビゲーションのみ...これはバグですか? MFCでこれを再現できません...

助言がありますか?

更新 この奇妙さを再現しないコントロールを見つけることができました...

System.Windows.Forms.MainMenu は、他のオブジェクトのように動作しない唯一の "ツールバー オブジェクト" です...

ただし、上記についてのフィードバックが必要です(他の人や自分のためのヘルプ)...

更新 2 根本的な問題は [ToolStripObject].TabFocus プロパティ内にあります... false に設定すると、すべて正常に動作するように見えます... フォーカスされているように「見える」コントロールにフォーカスを戻します。しかし、視覚障害のあるユーザーがタブを介してすべての UI コントロールをナビゲートできるようにする機能は、実装するのに便利です...このプロパティが本来のように機能しないのは残念です....

4

1 に答える 1

2

ToolStripMenuItem をオーバーライドすることで機能するようになりました。

public class ToolStripMenuItemEx : ToolStripMenuItem {

  protected override bool ProcessCmdKey(ref Message m, Keys keyData) {
    if (keyData == Keys.Escape) {
      ToolStripDropDownButton tb = this.OwnerItem as ToolStripDropDownButton;
      if (tb != null) {
        tb.HideDropDown();
        return false;
      }
    }
    return base.ProcessCmdKey(ref m, keyData);
  }
}
于 2013-01-09T20:34:05.027 に答える