テキストボックスまたはリストボックスがフォーカスされている場合にのみリストボックスが表示されるようにするテキストボックスとリストボックスのセットアップがあります。まず、リストボックスは非表示になります。次に、テキストボックスがフォーカスされると、リストボックスが表示されます。いずれかがフォーカスを失い、どちらもフォーカスを受け取っていない場合にのみ、リストボックスが再び非表示になります。したがって、私が達成したいのは、次のことが常に真であることです。
listBox.Visible = textBox.Focused || listBox.Focused
私のソリューションでは、テキストボックスおよび/またはリストボックスを標準タイプの特殊化にすることができます(これがソリューションを簡素化する場合)。
コントロールの LostFocus と GotFocus の両方のイベントをリッスンして、リストボックスの可視性を設定しようとしました。ただし、テキストボックスがフォーカスを失ったときにリストボックスを非表示にするため、リストボックスで GotFocus イベントが呼び出されることはありません。
これを達成する方法について誰か提案がありますか? 私のバックアップ計画 (私は嫌いです) は、一方がフォーカスを失ったときにタイマーを開始し、もう一方がフォーカスを取得したときにタイマーを停止することです。したがって、それを達成するための「よりクリーンな」方法があれば大歓迎です;)
編集: .NET WinForms カスタム コントロールとして使用するためにこれを開発しています。
編集2:
どうも自分のことをうまく説明できていないようです。そこで、私が達成したいことをより明確に説明しようと思います。
新しいタイプの TextBox を作成しています (数年前に作成した既存のタイプの TextBox を継承しています)。TextBox は現在、オブジェクトの汎用コレクション (IList を実装するサブタイプを含む) として機能しています。TextBox は、一連の基準に基づいてコレクション内の要素のサブセットを表示する ListBox を定義します。TextBox が親コントロールに追加されると、ListBox も追加されます。したがって、この 2 つは、コレクション内の要素を検索するようなセットアップとして機能します。入力を開始するとブラウザが候補を表示するのと同じようなものです。
両方のコントロールを含む UserControl の代わりにこの設定を使用しています。これは、後者の場合、ユーザー コントロールが両方のコントロールのサイズになるか、(サイズが TextBox と一致する場合) ListBox が非表示になるためです。
このコントロールが追加されたフォーム内のすべてのコントロールで、GotFocus または Enter イベントを処理することを選択できることに気付きました。これは私が考えた非常に簡単なアプローチですが、フォーム内の他のすべてのコントロールをリッスンしないコントロールを作成することを強く望んでいます。
これが明確になることを願っています。