WinForms でカスタム AutoCompleteTextBox コントロールを作成しようとしています。基本的な TextBox によって提供される AutoComplete は、 ではなく のみで結果を提供し(string).StartsWithます(string).Contains。
オートコンプリートの検索結果をListBox別の にドッキングして表示していFormます。Form次を使用して、最初にフォーカスを盗むのを防ぐことができます。
protected override bool ShowWithoutActivation
{
get { return true; }
}
次に、次の方法でメソッドをFormオーバーライドすることで、 が完全にフォーカスされるのを防ぐことができます。WndProc
protected override void WndProc( ref Message m )
{
base.WndProc( ref m );
switch ( m.Msg )
{
case WM_MOUSEACTIVATE:
m.Result = ( IntPtr ) MA_NOACTIVATEANDEAT;
break;
default:
break;
}
これを行うと、 にListBox含まれる はイベントFormを受け取りますが、イベントは受け取りMouseMovedませんMouseClicked。
justMA_NOACTIVATEANDEATに変更するMA_NOACTIVATEと、マウス イベントが に渡されListBoxますが、 をクリックすると、 が存在するListBoxからフォーカスが奪われます -Formが存在する 'フローティング'にListBox渡されます。FormListBox
内でイベントを取得しながら、「フローティング」Formが「メイン」からフォーカスを奪うのを防ぐ方法はありますか?FormMouseClickListBox