2013-03-23 2 views
0

기본적으로 수평 스크롤을 사용하지 않도록 설정하고 VB.NET에서 listview를 사용하도록 설정 한 상태에서 수직 스크롤을 사용하지 않고 새 클래스를 만들지 않아도되는지 궁금합니다.목록보기에서 가로 스크롤링 만 사용 중지 할 수 있습니까?

왜? 글쎄, 순수하게 미학적인데, 내 listview는 현재 수평 스크롤이 약간있다. 너무 많은 노력 없이도 코딩이 가능하다면, 새로운 클래스를 만들기위한 노력은 가치가 없다. 그 일을 기꺼이해야한다.

PS : 나는 윈도우에서 작업하고있어 볼

+1

아니요, 단순하지 않고 WndProc을 무시해야합니다. –

+0

UI를 완벽하게 제어하기 위해 WPF 또는 Silverlight로 전환하십시오. – OneFineDay

+0

Hans Passant에게 감사드립니다. @DonA가되었지만 WPF 대신 일반 winforms를 사용하는 것이 더 편하게 느껴졌습니다. 왜 그런지 모르겠지만 과거에는 WPF 프로젝트를 만들어야 만했습니다. 그것은 완전히 다른 환경처럼 보입니다. – Yorrick

답변

2

가 나는 종종 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 이벤트 트리거와 컬럼의 폭을 조정한다 있도록 클라이언트 영역을 정확히 채 웁니다.

관련 문제