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
渡されます。Form
ListBox
内でイベントを取得しながら、「フローティング」Form
が「メイン」からフォーカスを奪うのを防ぐ方法はありますか?Form
MouseClick
ListBox