我正在尝试在 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
事件。
更改MA_NOACTIVATEANDEAT
为只会MA_NOACTIVATE
将鼠标事件传递给ListBox
,但随后会导致单击以从驻留中ListBox
窃取焦点- 将其传递给“浮动”所在。Form
ListBox
Form
ListBox
有什么办法可以防止“浮动”Form
从“主要”集中注意力,Form
同时仍然在MouseClick
内部获取事件ListBox
?