2011-06-10 2 views
1

ListBox (WinForms)를 구성하여 클릭 + 끌기 또는 shift + 클릭으로 여러 항목을 선택할 수 있지만 연속 된 항목 만 선택할 수 있도록 할 수있는 좋은 방법이 있습니까? 본질적으로 ListBox의 선택 동작을 TextBox처럼 (사용자 관점에서)하지만 전체 행만 선택할 수 있도록 제한하고 싶습니다.ListBox (또는 대안)를 연속 항목을 선택하도록 제한하는 방법은 무엇입니까?

지금은 UserDrawVariable ListBox를 이벤트 로그로 사용하고 있지만 UserDrawVariable Listbox의 스크롤 동작은 다소 어색합니다. 나는 UserDrawFixed ListBox로 변경하고 싶습니다. 여러 항목을 사용하여 더 커야합니다 (첫 번째 항목에 대한 참조를 보유하는 나중 항목에 대해 "ItemExtension"유형을 가짐). 그들). 내가 선택 동작을 합리적으로 할 수 있다고 생각할 수있는 유일한 방법은 선택 범위의 시작과 끝을 추적하고 적어도 부분적으로 선택된 항목을 강조 표시하는 것입니다. 개별 항목 선택 플래그를 사용하면 사용자가 두 부분으로 구성된 "항목"의 위쪽 절반을 클릭 한 다음 아래쪽 절반을 컨트롤 클릭 할 경우 불안정 해 보입니다. 절반을 클릭하면 항목이 강조 표시되고 Ctrl 키를 누른 상태에서 클릭하면 강조 표시가 해제되지만 클릭 수가 개별 항목에 등록되므로 그럴 것이라고 생각하지 않습니다.

아마도 ListBox는 실제로 올바른 컨트롤이 아닙니다. 제한없는 라이센스로 더 나은 오픈 소스 컨트롤에 대한 제안을 할 수 있습니다 (애플리케이션을 오픈 소스화할 수 없음).

답변

0

제안 1) Ctrl 키를 누른 상태에서 컨트롤을 클릭하고 a) 선택 항목이 없거나 클릭 한 항목이 현재 선택 항목에 인접한 경우에만 허용합니다.

제안 2) 목록 상자 하위 클래스의 필드에 마지막 선택 항목을 유지하고 선택 항목 변경 이벤트에서 새 선택 항목이 유효 (연속적)인지 확인하고 그렇지 않은 경우 마지막 항목을 선택하여 no 변화. 선택 사항이 유효하면 마지막 선택 필드로 승격하십시오.

+0

비슷한 시도를했는데, 사용자 상호 작용의 결과로 선택한 항목의 양이 증가했는지 감소했는지를 파악하기위한 약간의 논리가있어 유효하지 않은 선택 항목 그룹을 만드는 클릭이 선택의 논리적 연결 그룹; 나는 그 결과에 만족하지 않았기 때문에 비 연속적 선택을 다루기 위해 코드를 변경하는 것이 더 낫다고 생각했다. 그래도 궁금한 점이 있습니다 ... – supercat

+0

... ListBox는 비 연속 선택을 허용하는 두 가지 모드를 제공하지만 여러 연속 항목 만 선택할 수있는 모드는 제공하지 않습니다 (예 : 텍스트 상자의 경우처럼). – supercat

관련 문제