가 나는 종종 ListBox 컨트롤에서 부족 드래그 앤 드롭 기능과 목록을 제공하기 위해 하나의 열이 세부 사항에있는 ListView 컨트롤을 사용하여 양식 . ListView는 수평으로 스크롤하려는 성가신 습관과 별개로 아름답게 작동합니다. 적절한 너비 (일반적으로 ListView의 너비보다 4 작은)로 열 너비를 설정하여 어느 정도이 문제를 해결할 수 있지만 look-and-feel이 변경되면 렌더링이 잘되지 않고 컨트롤이 결정하면 완전히 실패합니다 실행시에 수직 스크롤 바를 추가한다
내가 사용하는 대안 (모든 상황에 대처하지 못함을 인정합니다)은 다음과 같습니다. 첫째, 하나의 열이있는 목록보기 구성 (이름이 임의) 및 헤더를 숨기기 :
lvList.View = View.Details
lvList.FullRowSelect = True
lvList.Columns.Add("ColName")
lvList.Columns(0).Width = lvList.ClientSize.Width
lvList.HeaderStyle = ColumnHeaderStyle.None
은 그 다음의 ListView의 ClientSizeChanged 이벤트를 처리하고 클라이언트 영역의 너비에 열의 너비를 설정하는 데 사용할 (본질적리스트 본체 기입하는 영역이다) 목록 내용을 변경하고, 수직 스크롤바가 추가되거나 제거 될 때
Private Sub lvList_ClientSizeChanged(ByVal sender As Object, ByVal e As EventArgs) _
Handles lvList.ClientSizeChanged
If lvList.Columns.Count > 0 Then
lvList.Columns(0).Width = lvList.ClientSize.Width
End If
End Sub
상기 ClientSizeChange 이벤트 트리거와 컬럼의 폭을 조정한다 있도록 클라이언트 영역을 정확히 채 웁니다.
아니요, 단순하지 않고 WndProc을 무시해야합니다. –
UI를 완벽하게 제어하기 위해 WPF 또는 Silverlight로 전환하십시오. – OneFineDay
Hans Passant에게 감사드립니다. @DonA가되었지만 WPF 대신 일반 winforms를 사용하는 것이 더 편하게 느껴졌습니다. 왜 그런지 모르겠지만 과거에는 WPF 프로젝트를 만들어야 만했습니다. 그것은 완전히 다른 환경처럼 보입니다. – Yorrick