2015-01-15 1 views
1

나는 C# .net에서 몇 주 동안 바둑판 식으로 나열된 listView를 연속적으로 이해하지 않으려 고 시도해 왔습니다.이동 목록보기 타일?

내 listView (도형 2에 고정되어 있음)의 그림 (그림이있는 항목)과 동일한 타일 크기로 양식의 높이/너비 (154x154)를 축소했습니다. 내 form2가 표시되면 listView ... [0] 항목이 표시됩니다. (나는 지금까지 그렇게 잘 할!)

난 도망 양쪽 모두의 스크롤과는 false로 스크롤 속성을 설정 한 (작동 완벽하게 잘 지금까지 ...)

내가 걸려있는 모두 왼쪽과 오른쪽 화살표 키 GLOBALLY (완전히 디버깅 된 것으로 작동 함) 및 오른쪽 화살표 키를 클릭하면 VERTICALLY 항목 [1]을 가져와 네 번째로 가져와야합니다.

그것이 내가 다음을 시도 0

안타까지 왼쪽 화살표 키 이전 항목을 가져올 것입니다,하지만 아무것도하지 않습니다.

private void HotkeyHandler(int i) 
    { 
     { 
      if (this.listView1.InvokeRequired) 
      { 
       SetHotkeyCallback p = new SetHotkeyCallback(HotkeyHandler); 
       this.Invoke(p, new object[] { i }); 
      } 
      else 
      { 
       switch (i) 
       { 
        case 1: 
         listView1.View = View.List; 

         if (listView1.TopItem.Index > 0) 
         { 
          listView1.TopItem = listView1.Items[listView1.TopItem.Index - 1]; 
         } 

         listView1.View = View.Tile; 
         break; 

        case 2: 
         listView1.View = View.List; 

         if (listView1.TopItem.Index < listView1.Items.Count) 
         { 
          listView1.TopItem = listView1.Items[listView1.TopItem.Index + 1]; 
         } 

         listView1.View = View.Tile; 
         break; 
       } 
      } 
     } 
    } 

제발 도와주세요, 몇 주 동안 내 마음을 잃어 버렸습니다.

편집 : 위의 함수 내에서 스위치가 꺼지고 디버깅했습니다. 따라서 문제가되는 것은 아닙니다 ...

+0

당신이 목록 및 타일보기 사이의 모든 시간을 전환 이유는 무엇입니까? 왜? – TaW

+0

필자는 scrollable을 false로 설정하고 타일이라면 topitem (분명히 작동하지 않는 ...)을 설정하기 위해 목록으로 전환해야한다고 읽었습니다. – Andrew

+0

어디서 읽었습니까? 그러나 [MSDN] (http://msdn.microsoft.com/de-de/library/system.windows.forms.listview.topitem%28v=vs.110%29.aspx) 메시지 :이 속성을 설정하면 효과가 없습니다. Scrollable 속성 값이 false_ – TaW

답변

1

직접 할 수 있다고 생각하지 않습니다.

ScrollBars을 제거하는 방법은 실제로 Scrollable = false;으로 설정됩니다. 하지만 그 말은 다음과 같습니다. 이제 ListView이 아니며 스크롤됩니다. 여기

많은 스크롤 문제에 대한 일반적인 해결 방법입니다 : 놓습니다 Panel에서 Listview 모든 Items을 보여주기 위해 필요에 따라이 큰합니다.

는 다음 순서로 아래로 단순히 이동LV를 스크롤 :

private void prepare_Click_1(object sender, EventArgs e) 
{ 
    // we sit inside a Panel 
    listView1.Parent = panel1; 
    // initially they have the same size 
    listView1.Size = panel1.Size; 
    listView1.Location = Point.Empty; 
    // a few test items 
    for (int i = 0; i < 100; i++) 
     listView1.Items.Add("Item " + i); 
    // now grow the height to display all items: 
    int cols = listView1.Width/listView1.TileSize.Width; 
    listView1.Height = (listView1.Items.Count/cols) * listView1.TileSize.Height; 
} 

// moving the LV up looks like scrolling down.. 
private void scrollDown_Click(object sender, EventArgs e) 
{ 
    listView1.Top -= listView1.TileSize.Height; 
    if (listView1.Bottom < panel1.Height) 
     listView1.Top = -listView1.Height + panel1.Height; 
} 


// moving the LV down looks like scrolling up.. 
private void scrollUp_Click_1(object sender, EventArgs e) 
{ 
    listView1.Top += listView1.TileSize.Height; 
    if (listView1.Top > 0) listView1.Top = 0; 
} 
+0

내 양식이 154x154로 설정되어 있고 listview가 154x154로 설정된 양식 내에 도킹되어 있습니다. 내 listView가 생성되면 항목을 채운 다음 항목 [0]이 스크롤 막대없이 표시됩니다 (크기가 154x154 인 그림) 아쉽습니다. 다시 시도하십시오 ... – Andrew

+0

this 나를 위해 작동하지 않습니다 ... – Andrew

+0

그것은 여기에서 작동합니다. 어떻게 작동하지 않습니까? 또한 : 모든 시도가 끝난 후에 코드에 많은 일이 생길 수 있습니다. (예 : ListView가 더 이상 도킹되지 않음을 확인하십시오 = 채우기, 대신 도킹하십시오 ..) – TaW

관련 문제