WinForms에서 사용자 지정 AutoCompleteTextBox 컨트롤을 만들려고합니다. 기본 텍스트 상자에서 제공하는 자동 완성 기능은 (string).Contains
이 아닌 (string).StartsWith
이라는 결과 만 제공합니다.마우스 클릭을 수신하는 동안 양식이 포커스를 훔치지 않도록하려면 어떻게해야합니까?
에 도킹 된 ListBox
의 자동 완성 검색 결과가 표시됩니다. 전체를 통해 WndProc
방법을 재정 의하여 I 초점을 얻고에서 Form
을 방지 할 수 있습니다, 그리고
protected override bool ShowWithoutActivation
{
get { return true; }
}
: 나는 통해 사용하여 처음에 초점을 훔치는에서 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_NOACTIVATE
ListBox
마우스 이벤트를 통과 할 것이 아니라, 다음 ListBox
에 클릭이 Form
에서 초점을 훔치는하게됩니다 MA_NOACTIVATEANDEAT
을 Chaning
ListBox
가에있는 -에 통과하는 '부동'는 ListBox
가에 Form
을 .
ListBox
내
MouseClick
이벤트를 가져 오는 동안
Form
'기본'에서 초점을 steeling에서 '부동'
Form
을 방지 할 수있는 방법이 있습니까?
에
더 난 당신이 단순히 클릭이 목록 상자에서 수신 한 후 기본 폼에 다시 초점을 넣어 강제 것입니다 ... 또는 목록 상자 항목을 결정하기 위해 마우스 이동 이벤트를 사용하여 생각 끝났어. HitTest (IIRC)는 ListBoxItem을 제공합니다. – IAbstract
@lAbstract 포커스를 뒤로 이동하는 문제는 다음 번에 부동 양식을 표시 할 때 기본 폼이 부동 양식 앞에 표시되는 것입니다. 그런 다음 플로팅 폼에서 BringToFront를 호출하면 포커스가 주어져 다시 메인 폼에서 훔쳐옵니다. – Anthony
... 아, 이해 : 그렇다면 메인 폼에서 마우스 움직임을 모니터링 할 수 있다면 메인 폼에서'HitTestInfo'를 얻을 수 있습니까? 그렇게 할 수 있다면 실제로 플로팅 폼에서 선택한 항목을받을 수 있습니다. 내 생각 엔. ;) – IAbstract