2011-07-26 17 views
2

WinForm 콤보 상자를 확장하여 자동 완성을 구현했습니다. 지금하고 싶은 것은 타이핑 할 때 드롭 다운 높이를 줄이는 것입니다.ComboBox의 DropDownHeight를 줄이려면 어떻게해야합니까?

내가 해봤 같은 물건 다음 KeyUp 이벤트 핸들러의 끝에

this.DropDownHeight = this.ItemHeight * this.Items.Count 

,하지만 결과는 매우 이상한 것입니다.

이 작은 문제를 어떻게 해결할 수 있습니까?

+0

신장 감소 기준은 무엇입니까? – V4Vendetta

+0

표시된 숫자의 높이를 줄이는 것이 었습니다 – jGong

+0

코디가 그것에 대해 큰 통찰력을주었습니다. 같은 표를 얻었습니다 – V4Vendetta

답변

4

DropDownHeight 속성은 드롭 다운 될 때 콤보 상자의 높이를 제어합니다.

(예, 말, 그 정도! 분명하다)하지만 그 하지 자동 완성 제안 목록과 같은 것입니다.

는 (? 무엇 그들은 같은 모양, 그들은 모두 항목의 목록을 아래로 떨어졌다있어!)

네,이다. 그러나 그것들은 무대 뒤에서 아주 다르게 구현됩니다. 드롭 다운 콤보 상자는 드롭 다운 부분이 화면에 영구적으로 표시되는 "전체"콤보 상자 (WinForms에서 "단순"이라고도 함)와 같습니다. 유일한 차이점은 "DropDown"또는 "DropDownList"스타일에서는 드롭 다운 부분이 숨겨지고 사용자가 요청한 경우에만 표시된다는 것입니다. (A comparison of various combo box styles.)이 스타일의 원래 의도는 화면 공간을 절약하는 것이었지만 이제 화면 공간이 더 이상 걱정거리가 아니더라도 모두가 대신 사용하는 인기가 있습니다.

드롭 다운 항목 목록 을 변경하지 않는다는 의미입니다. Windows는 자동 완성 제안을 표시하기 위해 동일한 드롭 다운 목록을 다시 사용하지 않습니다. 이것은 필요에 따라 생성되고 파괴되는 완전히 다른 팝업 창입니다. 자동 완성 제안 목록은 크기 조정 가능입니다. 구석에 그리퍼 크기를 조정할 수 있습니다. 일반 드롭 다운 목록에는이 항목이 없으므로 동일한 드롭 다운 목록에있을 수 없습니다. 전문적으로 자동 완성 제안 목록은 셸 IAutoCompleteInterface에 의해 구현되며 모든 편집 컨트롤에서 사용되는 것과 동일합니다. (또 다른 죽은 포기는 this one과 같은 버그에서 찾을 수 있습니다.)

실제로은 자동 완성 제안 목록의 드롭 다운 높이를 변경해야합니다! 그러나 유감스럽게도 WinForms는 그렇게하기위한 속성을 공개하지 않습니다.

그러므로 이 처음에는이 아니어야한다고 결론내는 것이 합리적입니다. 사용자가 자동 ​​완성 제안 상자의 크기를 조정할 수 있도록 허용합니다. 그것이 리사이즈 그리퍼가있는 곳입니다. 그들이 선택한 마지막 크기는 기억되고 다시 사용됩니다. 디자인 부서에서 뭔가 "더 잘"할 수 있다고 생각할 때에도 항상 사용자를 존중하십시오.

물론 Windows이기 때문에 손을 더럽힐 수있는 경우 문제를 해결할 수있는 방법이 있습니다. 자동 완성 제안 목록은 여전히 ​​창이므로 창 핸들이 있으며 Windows는 핸들을 얻을 수있는 거의 모든 창을 조작 할 수 있도록합니다. 필자는이 작업을 권장하지 않으므로 on your own을 해킹하여 솔루션을 해킹하겠습니다.이와 같은 기능이 노출되지 않은 경우 일반적으로 이유가 없으면 노출되지 않습니다. 셸 팀이 자동 완성 기능을 다시 사용하는 Windows의 이후 버전에서 해킹이 발생할 가능성이 있습니다. 지원 번거 로움의 가치는 거의 없습니다.

+0

답이 좋고 분명한 설명이 많이 있습니다. – jGong

관련 문제