我正试图在WinForms中创建一个自定义的AutoCompleteTextBox控件。基本TextBox提供的自动完成仅使用(string).StartsWith而不是(string).Contains提供结果。
我将自动完成搜索结果显示在一个ListBox中,该ListBox停靠在单独的Form中。我可以通过以下方式防止Form最初窃取焦点:
当我这样做时,
将
是否有任何方法可以防止 'floating'
我将自动完成搜索结果显示在一个ListBox中,该ListBox停靠在单独的Form中。我可以通过以下方式防止Form最初窃取焦点:
protected override bool ShowWithoutActivation
{
get { return true; }
}
我可以通过覆盖WndProc
方法,完全防止 Form
获得焦点:
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;
}
当我这样做时,
Form
中包含的 ListBox
将接收到 MouseMoved
事件,但不会接收到 MouseClicked
事件。将
MA_NOACTIVATEANDEAT
更改为只有 MA_NOACTIVATE
将把鼠标事件传递给 ListBox
,但是这会导致在 ListBox
上的点击窃取了焦点从而转移到 'floating' Form
中的 ListBox
。是否有任何方法可以防止 'floating'
Form
从 'main' Form
中窃取焦点,同时仍然能够在 ListBox
中获取 MouseClick
事件?
HitTestInfo
?如果您能够做到这一点,那么您实际上可以从浮动窗体接收所选项目...我想。;) - IAbstract